主页 详情

《C++ Templates 第2版 英文版》_(美)戴维·范德沃德(David Vandevoorde),(德)尼古拉·约祖蒂斯_14422282_978

【书名】:《C++ Templates 第2版 英文版》
【作者】:(美)戴维·范德沃德(David Vandevoorde),(德)尼古拉·约祖蒂斯
【出版社】:北京:人民邮电出版社
【时间】:2018
【页数】:788
【ISBN】:9787115479938
【SS码】:14422282

最新查询

内容简介

第1部分:基本概念

第1章 函数模板

1.1 初识函数模板

1.1.1 定义模板

1.1.2 使用模板

1.1.3 二阶段翻译

1.2 模板参数推导

1.3 多模板参数

1.3.1 返回类型的模板参数

1.3.2 推导返回类型

1.3.3 作为通用类型返回

1.4 缺省模板参数

1.5 重载函数模板

1.6 但是,难道我们不应该…?

1.6.1 按值传递还是按引用传递?

1.6.2 为什么不用inline呢?

1.6.3 为什么不用constexpr呢?

1.7 小结

2 第2章 类模板

2.1 类模板Stack的实现

2.1.1 类模板声明

2.1.2 成员函数的实现

2.2 类模板Stack的使用

2.3 类模板的局部使用

2.3.1 概念

2.4 友元

2.5 类模板特化

2.6 偏特化

2.7 缺省类模板参数

2.8 类型别名

2.9 类模板参数推导

2.10 模板聚合

2.11 小结

3 第3章 非类型模板参数

3.1 非类型类模板参数

3.2 非类型函数模板参数

3.3 非类型模板参数的限制

3.4 模板参数类型

3.5 小结

4 第4章 可变参数模板

4.1 变参数模板

4.1.1 可变参数模板实例

4.1.2 重载可变参数和非可变参数模板

4.1.3 算符sizeof

4.2 折叠表达式

4.3 可变参数模板的应用

4.4 可变参数类模板和可变参数表达式

4.4.1 可变参数表达式

4.4.2 可变参数指数

4.4.3 可变参数类模板

4.4.4 可变参数推导指南

4.4.5 可变参数基类和using

4.5 小结

5 第5章 基础技术

5. 关键字typename

5.2 零初始化

5.3 this->的使用

5.4 原始数组和字符串字面量模板

5.5 成员模板

5.5.1 构造.template

5.5.2 泛型Lambda与成员模板

5.6 变量模板

5.7 模板的模板参数

5.8 小结

6 第6章 移动语义与enable_if<>

6.1 完美转发

6.2 特殊的成员函数模板

6.3 使用enable_if<>禁用模板

6.4 使用enable_if<>

6.5 使用概念简化enable_if<>表达式

6.6 小结

7 第7章 按值传递还是按引用传递?

7.1 按值传递

7.2 按引用传递

7.2.1 按常量引用传递

7.2.2 按非常量引用传递

7.2.3 按转发传递

7.3 std::ref()和std::cref()的使用

7.4 处理字符串字面量常量与原始数组

7.4.1 字符串字面量常量和原始数组的特殊实现

7.5 处理返回值

7.6 模板参数声明推荐

7.7 小结

8 第8章 编译时编程

8.1 模板元编程

8.2 使用constexpr计算

8.3 局部特化的执行路径选择

8.4 SFINAE(替换失败并不是一种错误)

8.4.1 带有decltype的SFINAE表达式

8.5 编译时if

8.6 小结

9 第9章 在实战中使用模板

9.1 包含模型

9.1.1 接器错误

9.1.2 头文件中的模板

9.2 模板和inline

9.3 预编译头文件

9.4 破译大篇幅错误信息

9.5 本章后记

9.6 小结

10 第10章 基本模板术语

10.1 “类模板”还是“模板类”?

10.2 替换、实例化和特化

10.3 声明和定义

10.3.1 完全和不完全类型

10.4 一处定义规则

10.5 模板实数和模板形参

10.6 小结

11 第11章 泛型库

11.1 Callable

11.1.1 支持函数对象

11.1.2 处理成员函数和附加实参

11.1.3 包装函数调用

11.2 实现泛型库的其他实用程序

11.2.1 Type Traits

11.2.2 std::addressof()

11.2.3 std::declval()

11.3 完美转发临时对象

11.4 引用为模板参数

11.5 延迟评估

11.6 编写泛型库时需要考虑的事情

11.7 小结

第2部分 深入模板

12 第12章 深入模板基础

12.1 参数化宣告

12.1.1 虚成员函数

12.1.2 模板链接

12.1.3 主模板

12.2 模板形参

12.2.1 类型形参

12.2.2 类型形参

12.2.3 模板的模板形参

12.2.4 模板参数包

12.2.5 缺省模板实参.

12.3 模板实参

12.3.1 函数模板实参

12.3.2 类型实参

12.3.3 非类型实参

12.3.4 模板的模板实参

12.3.5 实参的等价性

12.4 可变参数模板

12.4.1 包扩展

12.4.2 在哪里进行包扩展?

12.4.3 函数的参数包

12.4.4 多重和嵌套包扩展

12.4.5 零长度包扩展

12.4.6 折叠表达式

12.5 友元

12.5.1 类模板的友元类.

12.5.2 类模板的友元函数

12.5.3 友元模板

12.6 本章后记

13 第13章 模板中的名称

13.1 名称的分类

13.2 名称的查找

13.2.1 参数依赖查找(ADL)

13.2.2 友元声明的ADL

13.2.3 注入式类名称

13.2.4 当前实例化

13.3 解析模板

13.3.1 非模板的上下文敏感性

13.3.2 类型的依赖名称

13.3.3 模板的依赖名称

13.3.4 使用声明中的依赖名称

13.3.5 ADL和显式模板实参

13.3.6 依赖表达式

13.3.7 编译器错误

13.4 继承和类模板

13.4.1 依赖型基类

13.4.2 依赖型基类

13.5 本章后记

14 第14章 实例化

14.1 按需实例化

14.2 延迟实例化

14.2.1 分和全部实例化

14.2.2 实例化组件

14.3 C++实例化模型

14.3.1 二阶段查找

14.3.2 实例化点

14.3.3 包含模型

14.4 实现方案

14.4.1 贪婪实例化

14.4.2 询问实例化

14.4.3 迭代实例化

14.5 显式实例化

14.5.1 手动实例化

14.5.2 式实例化声明

14.6 编译时if语句

14.7 在标准库中

14.8 本章后记

15 第15章 模板实参推导

15.1 推导过程

15.2 推导上下文

15.3 特殊的推导情况

15.4 初始化列表

15.5 形参包

15.5.1 字面运算符模板

15.6 右值引用

15.6.1 引用折叠原则

15.6.2 转发引用

15.6.3 完美转发

15.6.4 推导的惊喜

15.7 SFINAE(替换失败并不是错误)

15.7.1 即时上下文

15.8 推导的限制

15.8.1 可接受的实参转换

15.8.2 类模板实参

15.8.3 缺省调用实参

15.8.4 异常规范

15.9 显式函数模板实参

15.10 从初始化和表达式中推导

15.10.1 类型说明符

15.10.2 用decltype表示表达式的类型

15.10.3 decltype(auto)

15.10.4 auto推导的特殊情况

15.10.5 结构化绑定

15.10.6 型Lambda表达式

15.11 别名模板

15.12 类模板实参推导

15.12.1 推导指南

15.12.2 隐式推导指南

15.12.3 其他细节

15.13 本章后记

16 第16章 特化和重载

16.1 当“泛型代码”并不能很好地解决问题时

16.1.1 透明自定义

16.1.2 语义透明度

16.2 重载函数模板

16.2.1 签名

16.2.2 重载函数模板的偏序

16.2.3 正式的排序规则

16.2.4 模板和非模板

16.2.5 可变参数函数模板

16.3 显式特化

16.3.1 全局类模板特化

16.3.2 全局函数模板特化

16.3.3 全局可变模板特化

16.3.4 全局成员特化

16.4 局部类模板特化

16.5 局部可变模板特化

16.6 本章后记

17 第17章 未来发展方向

17.1 宽松的typename原则

17.2 广义非类型模板参数

17.3 函数模板的局部特化

17.4 命名模板实参

17.5 重载类模板

17.6 中间包扩展的推导

17.7 void的规范化

17.8 模板的类型检查

17.9 反射元编程

17.10 包管理工具

17.11 模块

第3部分 模板和设计

18 第18章 模板的多态性

18.1 动态多态性

18.2 静态多态性

18.3 动态多态性与静态多态性

18.4 概念

18.5 设计模式的新形式

18.6 泛型编程

18.7 本章后记

19 第19章 Trait的实现

19.1 一个实例:累加一个序列

19.1.1 Fixed Trait

19.1.2 Value Trait

19.1.3 参数化Trait

19.2 Trait、Policy和Policy类

19.2.1 Trait和Policy:区别在哪里?

19.2.2 成员模板与模板的模板参数

19.2.3 组合多个policy和/或trait

19.2.4 用一般迭代器累积

19.3 类型函数

19.3.1 元素类型

19.3.2 转换特点

19.3.3 谓词特点

19.3.4 Result Type Traits

19.4 基于SFINAE的Trait

19.4.1 SFINAE功能过载

19.4.2 SFINAE局部特化

19.4.3 为SFINAE使用泛型Lambda表达式

19.4.4 SFINAE友好的特征

19.5 IsConvertibleT

19.6 检查成员

19.6.1 检查成员类型

19.6.2 检查任意成员类型

19.6.3 检查非类型成员

19.6.4 使用泛型Lambda表达式检查成员

19.7 其他Trait技术

19.7.1 If-Then-Else

19.7.2 检查不抛出异常的操作

19.7.3 Trait的便利性

19.8 类型分类

19.8.1 确定基本类型

19.8.2 确定复合类型

19.8.3 识别函数类型

19.8.4 确定类类型

19.8.5 确定枚举类型

19.9 Policy Traits

19.9.1 只读参数类型.

19.10 在标准库中

19.11 本章后记

20 第20章 类型属性上的重载

20.1 算法特化

20.2 标签调度

20.3 启用/禁用函数模板

20.3.1 提供多重特化

20.3.2 EnableIf在哪里运行?

20.3.3 编译时if

20.3.4 概念

20.4 类的特化

20.4.1 启用/禁用类模板

20.4.2 类模板标签调度

20.5 实例化安全的模板

20.6 在标准库中

20.7 本章后记

21 第21章 模板和继承

21.1 空白基类最优化

21.1.1 布局原则

21.1.2 成员作为基类

21.2 奇异递归模板模式

21.2.1 Barton-Nackman技巧

21.2.2 操作符实现

21.2.3 门面模式

21.3 Mixin

21.3.1 令人好奇的Mixin

21.3.2 参数化的虚拟性

21.4 指定模板参数

21.5 本章后记

22 第22章 桥接静态和动态多态性

22.1 函数对象、指针和std::function<>

22.2 广义函数指针

22.3 桥接口

22.4 类型擦除

22.5 可选桥接

22.6 性能考虑

22.7 本章后记

23 第23章 元编程

23.1 现代C++元编程的状态

23.1.1 取值元编程

23.1.2 类型元编程

23.1.3 合元编程

23.1.4 单元类型的混合元编程

23.2 反射元编程的维数

23.3 递归实例化的代价

23.3.1 跟踪所有实例

23.4 计算完整性

23.5 递归实例化与递归模板参数

23.6 枚举值与静态常量

23.7 本章后记

24 第24章 Typelist

24.1 Typelist解析

24.2 Typelist算法

24.2.1 索引

24.2.2 寻找最佳匹配

24.2.3 添加Typelist

24.2.4 反转Typelist

24.2.5 转化Typelist

24.2.6 累加Typelist

24.2.7 插入排序

24.3 非类型Typelist

24.3.1 推导的非类型参数

24.4 使用包扩展优化算法

24.5 Cons-style Typelist

24.6 本章后记

25 第25章 元组

25.1 基本的元组设计

25.1.1 存储

25.1.2 结构

25.2 基本的元组操作

25.2.1 比较

25.2.2 输出

25.3 元组算法

25.3.1 元组作为Typelist

25.3.2 从元组中添加和移除

25.3.3 反转一个元组

25.3.4 索引列表

25.3.5 用索引列表进行反转

25.3.6 洗牌算法和选择算法

25.4 扩展元组

25.5 优化元组

25.5.1 元组和EBCO

25.5.2 常数时间的get()

25.6 元组下标

25.7 本章后记

26 第26章 可识别的联合

26.1 存储

26.2 设计

26.3 值查询与提取

26.4 元素初始化、赋值和销毁

26.4.1 初始化

26.4.2 销毁

26.4.3 赋值

26.5 访问

26.5.1 访问结果类型

26.5.2 常见结果类型

26.6 变量初始化赋值

26.7 本章后记

27 第27章 表达式模板

27.1 临时变量和分割循环

27.2 在模板参数中编码表达式

27.2.1 表达式模板的操作数

27.2.2 Array类型

27.2.3 运算符

27.2.4 回顾

27.2.5 表达式模板赋值

27.3 表达式模板的性能与约束

27.4 本章后记

28 第28章 调试模板

28.1 浅式实例化

28.2 静态断言

28.3 原型

28.4 跟踪程序

28.5 Oracle

28.6 本章后记

附录

A 附录A一处定义原则

A.1 翻译单元

A.2 声明和定义

A.3 一处定义原则的细节

A.3.1 程序的一处定义约束

A.3.2 翻译单元的一处定义约束

A.3.3 跨翻译单元的等价性约束

B 附录B 值类别

B.1 传统的左值和右值

B.1.1 左值和右值转换

B.2 C++11的值类别

B.2.1 临时实体化

B.3 使用decltype检查值类别

B.4 引用类别

C 附录C重载解析

C.1 何时应用重载解析?

C.2 简化的重载解析

C.2.1 成员函数的隐式参数

C.2.2 对最佳匹配进行改进

C.3 重载的细节

C.3.1 优先非模板还是更加专用的模板

C.3.2 转义序列

C.3.3 指针转换

C.3.4 初始化列表

C.3.5 仿函数和代理函数

C.3.6 其他重载情况

D 附录D 标准类型实用程序

D.1 使用Type Traits

D.1.1 std::integral_constant和std::bool_constant

D.1.2 使用Trait时应该知道的事

D.2 主要类型和复合类型

D.2.1 测试主要类型的类别

D.2.2 测试复合类型的类别

D.3 类型属性和操作

D.3.1 其他类型属性

D.3.2 测试具体操作

D.3.3 类型之间的关系

D.4 类型结构

D.5 其他Trait

D.6 组合Type Trait

D.7 其他应用程序

E 附录E概念

E.1 使用概念

E.2 定义概念

E.3 重载约束

E.3.1 约束包含

E.3.2 约束和标签调度

E.4 概念提示

E.4.1 测试概念

E.4.2 概念粒度

E.4.3 二进制兼容性

文献目录

论坛

图书和网站

术语

索引


书查询(www.shuchaxun.com)本网页唯一编码:
b76010db1d844b4988a0209e9693eb35#453014bae42635c61c4b779cbf7dc876#253916022#14422282_C++ Templates 第2版 英文版.zip