《C++模板元编程》PDF下载

  • 购买积分:11 如何计算积分?
  • 作  者:(美)DavidAbrahams,AlekseyGurtovoy编著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2010
  • ISBN:9787111267423
  • 页数:277 页
图书介绍:本书是关于C++模板元编程的著作。本书主要介绍Traits和类型操纵、深入探索元函数、整型外覆器和操作、序列与迭代器、算法、视图与迭代器适配器、诊断、跨越编译期和运行期边界、领域特定的嵌入式语言、DSEL设计演练,另外附录部分还介绍了预处理元编程概述、typename和template关键字。本书通过理论联系实践,深入讲解了C++高级编程技术。

第1章 概述 1

1.1起步走 1

1.2元程序的概念 1

1.3在宿主语言中进行元编程 3

1.4在C++中进行元编程 3

1.4.1数值计算 3

1.4.2类型计算 5

1.5为何进行元编程 6

1.5.1替代方案1:运行期计算 6

1.5.2替代方案2:用户分析 6

1.5.3为何进行C++元编程 7

1.6何时进行元编程 7

1.7为何需要元编程程序库 7

第2章Traits和类型操纵 9

2.1类型关联 9

2.1.1采用一种直接的方式 9

2.1.2采用一种迂回方式 10

2.1.3寻找一个捷径 11

2.2元函数 12

2.3数值元函数 14

2.4在编译期作出选择 15

2.4.1进一步讨论iter_swap 15

2.4.2美中不足 16

2.4.3另一个美中不足 17

2.4.4“美中不足”之外覆器 18

2.5 Boost Type Traits程序库概览 19

2.5.1一般知识 20

2.5.2主类型归类 20

2.5.3次类型归类 21

2.5.4类型属性 22

2.5.5类型之间的关系 23

2.5.6类型转化 23

2.6无参元函数 23

2.7元函数的定义 24

2.8历史 24

2.9细节 25

2.9.1特化 25

2.9.2实例化 26

2.9.3多态 26

2.10练习 27

第3章 深入探索元函数 30

3.1量纲分析 30

3.1.1量纲的表示 31

3.1.2物理量的表示 33

3.1.3实现加法和减法 33

3.1.4实现乘法 34

3.1.5实现除法 37

3.2高阶元函数 39

3.3处理占位符 40

3.3.1 lambda元函数 41

3.3.2 apply元函数 42

3.4 lambda的其他能力 43

3.4.1偏元函数应用 43

3.4.2元函数复合 43

3.5 Lambda的细节 43

3.5.1占位符 43

3.5.2占位符表达式的定义 45

3.5.3 Lambda和非元函数模板 45

3.5.4“懒惰”的重要性 46

3.6细节 46

3.7练习 48

第4章 整型外覆器和操作 49

4.1布尔外覆器和操作 49

4.1.1类型选择 49

4.1.2缓式类型选择 51

4.1.3逻辑运算符 53

4.2整数外覆器和运算 55

4.2.1整型运算符 57

4.2.2_c整型速记法 58

4.3练习 59

第5章 序列与迭代器 61

5.1 Concepts 61

5.2序列和算法 62

5.3迭代器 62

5.4迭代器Concepts 63

5.4.1前向迭代器 63

5.4.2双向迭代器 64

5.4.3随机访问迭代器 65

5.5序列Concepts 66

5.5.1序列遍历Concepts 66

5.5.2可扩展性 68

5.5.3关联式序列 68

5.5.4可扩展的关联式序列 69

5.6序列相等性 71

5.7固有的序列操作 71

5.8序列类 72

5.8.1 list 72

5.8.2 vector 73

5.8.3 deque 74

5.8.4 range_c 74

5.8.5 map 74

5.8.6 set 75

5.8.7 iterator_range 75

5.9整型序列外覆器 75

5.10序列派生 76

5.11编写你自己的序列 77

5.11.1构建tiny序列 77

5.11.2迭代器的表示 78

5.11.3为tiny实现at 79

5.11.4完成tiny_iterator的实现 81

5.11.5 begin和end 82

5.11.6加入扩充性 85

5.12细节 86

5.13练习 87

第6章 算法 90

6.1算法、惯用法、复用和抽象 90

6.2 MPL中的算法 92

6.3插入器 93

6.4基础序列算法 95

6.5查询算法 97

6.6序列构建算法 98

6.7编写你自己的算法 100

6.8细节 101

6.9练习 102

第7章 视图与迭代器适配器 104

7.1一些例子 104

7.1.1对从序列元素计算出来的值进行比较 104

7.1.2联合多个序列 107

7.1.3避免不必要的计算 108

7.1.4选择性的元素处理 109

7.2视图Concept 109

7.3迭代器适配器 110

7.4编写你自己的视图 110

7.5历史 112

7.6练习 112

第8章 诊断 114

8.1调试错误 114

8.1.1实例化回溯 114

8.1.2错误消息格式化怪癖 116

8.2使用工具进行诊断分析 123

8.2.1听取他者的意见 124

8.2.2使用导航助手 124

8.2.3清理场面 124

8.3有目的的诊断消息生成 126

8.3.1静态断言 128

8.3.2 MPL静态断言 129

8.3.3类型打印 136

8.4历史 138

8.5细节 138

8.6练习 139

第9章 跨越编译期和运行期边界 140

9.1 for each 140

9.1.1类型打印 140

9.1.2类型探访 142

9.2实现选择 143

9.2.1 if语句 143

9.2.2类模板特化 144

9.2.3标签分派 144

9.3对象生成器 147

9.4结构选择 149

9.5类复合 153

9.6(成员)函数指针作为模板实参 156

9.7类型擦除 157

9.7.1一个例子 158

9.7.2一般化 159

9.7.3“手工”类型擦除 160

9.7.4自动类型擦除 161

9.7.5保持接口 162

9.8奇特的递归模板模式 164

9.8.1生成函数 164

9.8.2管理重载决议 166

9.9显式管理重载集 168

9.10 sizeof技巧 171

9.11总结 172

9.12练习 172

第10章 领域特定的嵌入式语言 173

10.1一个小型语言 173

10.2路漫漫其修远兮 175

10.2.1 Make工具语言 175

10.2.2巴科斯-诺尔模式 177

10.2.3 YACC 179

10.2.4 DSL摘要 181

10.3 DSL 182

10.4 C++用作宿主语言 184

10.5 Blitz++和表达式模板 186

10.5.1问题 186

10.5.2表达式模板 187

10.5.3更多的Blitz++魔法 190

10.6通用DSEL 191

10.6.1具名参数 191

10.6.2构建匿名函数 193

10.7 Boost Spirit程序库 199

10.7.1闭包 201

10.7.2子规则 202

10.8总结 205

10.9练习 205

第11章 DSEL设计演练 206

11.1有限状态机 206

11.1.1领域抽象 206

11.1.2符号 207

11.2框架设计目标 208

11.3框架接口基础 209

11.4选择一个DSL 210

11.4.1转换表 210

11.4.2组装成一个整体 213

11.5实现 216

11.6分析 221

11.7语言方向 223

11.8练习 223

附录A预处理元编程简介 226

附录B typename和template关键字 247

附录C编译期性能 258

附录D MPL可移植性摘要 274

参考文献 275