内容简介
第1章 关于本章
1.1阅读本书所需具备的知识
1.2本书的整体结构
1.3如何阅读本书
1.4关于编程风格的一些说明
1.5标准和现实
1.6代码例子和更多信息
1.7反馈
第1部分 基础
第2章 函数模板
2.1初探函数模板
2.1.1定义模板
2.1.2使用模板
2.2实参的演绎(deduction)
2.3模板参数
2.4重载函数模板
2.5小结
第3章 类模板
3.1类模板Stack的实现
3.1.1类模板的声明
3.1.2成员函数的实现
3.2类模板Stack的使用
3.3类模板的特化
3.4局部特化
3.5缺省模板实参
3.6小结
第4章 非类型模板参数
4.1非类型的类模板参数
4.2非类型的函数模板参数
4.3非类型模板参数的限制
4.4小结
第5章 技巧性基础知识
5.1关键字typename
5.2使用this-〉
5.3成员模板
5.4模板的模板参数
5.5零初始化
5.6使用字符串作为函数模板的实参
5.7小结
第6章 模板实战
6.1包含模型
6.1.1链接器错误
6.1.2头文件中的模板
6.2显式实例化
6.2.1显式实例化的例子
6.2.2整合包含模型和显式实例化
6.3分离模型
6.3.1关键字export
6.3.2分离模型的限制
6.3.3为分离模型做好准备
6.4模板和内联
6.5预编译头文件
6.6调试模板
6.6.1理解长段的错误信息
6.6.2浅式实例化
6.6.3长符号串
6.6.4跟踪程序
6.6.5 oracles
6.6.6 archetypes
6.7本章后记
6.8小结
第7章 模板术语
7.1“类模板”还是“模板类”
7.2实例化和特化
7.3声明和定义
7.4一处定义原则
7.5模板实参和模板参数
第2部分 深入模板
第8章 深入模板基础
8.1参数化声明
8.1.1虚成员函数
8.1.2模板的链接
8.1.3基本模板
8.2模板参数
8.2.1类型参数
8.2.2非类型参数
8.2.3模板的模板参数
8.2.4缺省模板实参
8.3模板实参
8.3.1函数模板实参
8.3.2类型实参
8.3.3非类型实参
8.3.4模板的模板实参
8.3.5实参的等价性
8.4友元
8.4.1友元函数
8.4.2友元模板
8.5本章后记
第9章 模板中的名称
9.1名称的分类
9.2名称查找
9.2.1 Argument-Dependent Lookup(ADL)
9.2.2友元名称插入
9.2.3插入式类名称
9.3解析模板
9.3.1非模板中的上下文相关性
9.3.2依赖型类型名称
9.3.3依赖型模板名称
9.3.4 using-declaration中的依赖型名称
9.3.5 ADL和显式模板实参
9.4派生和类模板
9.4.1非依赖型基类
9.4.2依赖型基类
9.5本章后记
第10章 实例化
10.1 On-Demand实例化
10.2延迟实例化
10.3 C++++的实例化模型
10.3.1两阶段查找
10.3.2 POI
10.3.3包含模型与分离模型
10.3.4跨翻译单元查找
10.3.5例子
10.4几种实现方案
10.4.1贪婪实例化
10.4.2询问实例化
10.4.3迭代实例化
10.5显式实例化
10.6本章后记
第11章 模板实参演译
11.1演绎的过程
11.2演绎的上下文
11.3特殊的演绎情况
11.4可接受的实参转型
11.5类模板参数
11.6缺省调用实参
11.7 Barton-Nackman方法
11.8本章后记
第12章 特化与重载
12.1当泛型代码不再适用的时候
12.1.1透明自定义
12.1.2语义的透明性
12.2重载函数模板
12.2.1签名
12.2.2重载的函数模板的局部排序
12.2.3正式的排序原则
12.2.4模板和非模板
12.3显式特化
12.3.1全局的类模板特化
12.3.2全局的函数模板特化
12.3.3全局成员特化
12.4局部的类模板特化
12.5本章后记
第13章 未来的方向
13.1尖括号Hack
13.2放松typename的原则
13.3缺省函数模板实参
13.4字符串文字和浮点型模板实参
13.5放松模板的模板参数的匹配
13.6 typedef模板
13.7函数模板的局部特化
13.8 typeof运算符
13.9命名模板实参
13.10静态属性
13.11客户端的实例化诊断信息
13.12重载类模板
13.13 List参数
13.14布局控制
13.15 初始化器的演绎
13.16函数表达式
13.17本章后记
第3部分 模板与设计
第14章 模板的多态威力
14.1动多态
14.2静多态
14.3动多态和静多态
14.3.1术语
14.3.2优点和缺点
14.3.3组合这两种多态
14.4新形式的设计模板
14.5泛型程序设计
14.6本章后记
第15章 trait与policy类
15.1一个实例:累加一个序列
15.1.1 fixed traits
15.1.2 value trait
15.1.3参数化trait
15.1.4 policy和policy类
15.1.5 trait和policy:区别在何处
15.1.6成员模板和模板的模板参数
15.1.7组合多个policie和/或trait
15.1.8运用普通的迭代器进行累积
15.2类型函数
15.2.1确定元素的类型
15.2.2确定class类型
15.2.3引用和限定符
15.2.4 promotion trait
15.3 policy trait
15.3.1只读的参数类型
15.3.2拷贝、交换和移动
15.4本章后记
第16章 模板与继承
16.1命名模板参数
16.2空基类优化
16.2.1布局原则
16.2.2成员作基类
16.3奇特的递归模板模式
16.4参数化虚拟性
16.5本章后记
第17章 metaprogram
17.1 metaprogram的第一个实例
17.2枚举值和静态常量
17.3第2个例子:计算平方根
17.4使用归纳变量
17.5计算完整性
17.6递归实例化和递归模板实参
17.7使用metaprogram来展开循环
17.8本章后记
第18章 表示式模板
18.1临时变量和分割循环
18.2在模板实参中编码表达式
18.2.1表达式模板的操作数
18.2.2 Array类型
18.2.3运算符
18.2.4回顾
18.2.5表达式模板赋值
18.3表达式模板的性能与约束
18.4本章后记
第4部分 高级应用程序
第19章 类型区分
19.1辨别基本类型
19.2辨别组合类型
19.3辨别函数类型
19.4运用重载解析辨别枚举类型
19.5辨别class类型
19.6辨别所有类型的函数模板
19.7本章后记
第20章 智能指针
20.1 holder和trule
20.1.1安全处理异常
20.1.2 holder
20.1.3作为成员的holder
20.1.4资源获取于初始化
20.1.5 holder的局限
20.1.6复制holder
20.1.7跨函数调用来复制holder
20.1.8 trule
20.2引用记数
20.2.1计数器在什么地方
20.2.2并发访问计数器
20.2.3析构和释放
20.2.4 CountingPtr模板
20.2.5一个简单的非侵入式计数器
20.2.6一个简单的侵入式计数器模板
20.2.7常数性
20.2.8隐式转型
20.2.9比较
20.3本章后记
第21章 tuple
21.1 duo
21.2可递归duo
21.2.1域的个数
21.2.2域的类型
21.2.3域的值
21.3 tuple构造
21.4本章后记
第22章 函数对象和回调
22.1直接调用、间接调用与内联调用
22.2函数指针与函数引用
22.3成员函数指针
22.4 class类型的仿函数
22.4.1 class类型仿函数的第1个实例
22.4.2 class类型仿函数的类型
22.5指定仿函数
22.5.1作为模板类型实参的仿函数
22.5.2作为函数调用实参的仿函数
22.5.3结合函数调用参数和模板类型参数
22.5.4作为非类型模板实参的仿函数
22.5.5函数指针的封装
22.6内省
22.6.1分析一个仿函数的类型
22.6.2访问参数的类型
22.6.3封装函数指针
22.7函数对象组合
22.7.1简单的组合
22.7.2混合类型的组合
22.7.3减少参数的个数
22.8值绑定
22.8.1选择绑定的目标
22.8.2绑定签名
22.8.3实参选择
22.8.4辅助函数
22.9仿函数操作:一个完整的实现
22.10本章后记
附录A一处定义原则
A.1翻译单元
A.2声明和定义
A.3一处定义原则的细节
A.3.1程序的一处定义约束
A.3.2翻译单元的一处定义约束
A.3.3跨翻译单元的等价性约束
附录B重载解析
B.1何时应用重载解析
B.2简化过的重载解析
B.2.1成员函数的隐含实参
B.2.2细化完美匹配
B.3重载的细节
B.3.1非模板优先
B.3.2转型序列
B.3.3指针的转型
B.3.4仿函数和代理函数
B.3.5其他的重载情况
参考资料
术语表