基本信息
名称: C++ Templates
作者信息: 作者: Nicolai M.Josuttis [ 中文 pdf ]
简单介绍
《C++ Templates中文版》全书共22章。第1章全面介绍了《C++ Templates中文版》的内容结构和相关情况。第1部分(第2~7章)以教程的风格介绍了模板的基本概念,第2部分(第8~13章)阐述了模板的语言细节,第3部分(第14~18章)介绍了C++模板所支持的基本设计技术,第4部分(第19~22章)深入探讨了各种使用模板的普通应用程序。附录A和附录B分别为一处定义原则和重载解析的相关资料。
目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304
| 第1章 关于本章 1 1.1 阅读本书所需具备的知识 2 1.2 本书的整体结构 2 1.3 如何阅读本书 2 1.4 关于编程风格的一些说明 3 1.5 标准和现实 5 1.6 代码例子和更多信息 5 1.7 反馈 5 第1部分 基础 7 第2章 函数模板 9 2.1 初探函数模板 9 2.1.1 定义模板 9 2.1.2 使用模板 10 2.2 实参的演绎(deduction) 12 2.3 模板参数 13 2.4 重载函数模板 15 2.5 小结 19 第3章 类模板 21 3.1 类模板Stack的实现 21 3.1.1 类模板的声明 22 3.1.2 成员函数的实现 23 3.2 类模板Stack的使用 25 3.3 类模板的特化 27 3.4 局部特化 29 3.5 缺省模板实参 30 3.6 小结 32 第4章 非类型模板参数 33 4.1 非类型的类模板参数 33 4.2 非类型的函数模板参数 36 4.3 非类型模板参数的限制 37 4.4 小结 38 第5章 技巧性基础知识 39 5.1 关键字typename 39 5.2 使用this—> 41 5.3 成员模板 42 5.4 模板的模板参数 45 5.5 零初始化 51 5.6 使用字符串作为函数模板的实参 52 5.7 小结 55 第6章 模板实战 57 6.1 包含模型 57 6.1.1 链接器错误 57 6.1.2 头文件中的模板 59 6.2 显式实例化 60 6.2.1 显式实例化的例子 61 6.2.2 整合包含模型和显式实例化 62 6.3 分离模型 63 6.3.1 关键字export 63 6.3.2 分离模型的限制 65 6.3.3 为分离模型做好准备 66 6.4 模板和内联 67 6.5 预编译头文件 68 6.6 调试模板 70 6.6.1 理解长段的错误信息 71 6.6.2 浅式实例化 72 6.6.3 长符号串 75 6.6.4 跟踪程序 75 6.6.5 oracles 79 6.6.6 archetypes 80 6.7 本章后记 80 6.8 小结 81 第7章 模板术语 83 7.1 “类模板”还是“模板类” 83 7.2 实例化和特化 84 7.3 声明和定义 85 7.4 一处定义原则 86 7.5 模板实参和模板参数 86 第2部分 深入模板 89 第8章 深入模板基础 91 8.1 参数化声明 91 8.1.1 虚成员函数 94 8.1.2 模板的链接 95 8.1.3 基本模板 96 8.2 模板参数 96 8.2.1 类型参数 97 8.2.2 非类型参数 97 8.2.3 模板的模板参数 98 8.2.4 缺省模板实参 99 8.3 模板实参 100 8.3.1 函数模板实参 101 8.3.2 类型实参 103 8.3.3 非类型实参 105 8.3.4 模板的模板实参 107 8.3.5 实参的等价性 109 8.4 友元 109 8.4.1 友元函数 110 8.4.2 友元模板 113 8.5 本章后记 113 第9章 模板中的名称 115 9.1 名称的分类 115 9.2 名称查找 117 9.2.1 Argument—DependentLookup(ADL) 119 9.2.2 友元名称插入 121 9.2.3 插入式类名称 121 9.3 解析模板 123 9.3.1 非模板中的上下文相关性 123 9.3.2 依赖型类型名称 125 9.3.3 依赖型模板名称 127 9.3.4 using—declaration中的依赖型名称 129 9.3.5 ADL和显式模板实参 130 9.4 派生和类模板 131 9.4.1 非依赖型基类 131 9.4.2 依赖型基类 132 9.5 本章后记 134 第10章 实例化 137 10.1 On—Demand实例化 137 10.2 延迟实例化 139 10.3 C++的实例化模型 142 10.3.1 两阶段查找 142 10.3.2 POI 142 10.3.3 包含模型与分离模型 145 10.3.4 跨翻译单元查找 146 10.3.5 例子 147 10.4 几种实现方案 149 10.4.1 贪婪实例化 151 10.4.2 询问实例化 152 10.4.3 迭代实例化 153 10.5 显式实例化 155 10.6 本章后记 159 第11章 模板实参演译 163 11.1 演绎的过程 163 11.2 演绎的上下文 165 11.3 特殊的演绎情况 167 11.4 可接受的实参转型 168 11.5 类模板参数 169 11.6 缺省调用实参 169 11.7 Barton—Nackman方法 170 11.8 本章后记 172 第12章 特化与重载 175 12.1 当泛型代码不再适用的时候 175 12.1.1 透明自定义 176 12.1.2 语义的透明性 177 12.2 重载函数模板 178 12.2.1 签名 179 12.2.2 重载的函数模板的局部排序 182 12.2.3 正式的排序原则 183 12.2.4 模板和非模板 185 12.3 显式特化 185 12.3.1 全局的类模板特化 186 12.3.2 全局的函数模板特化 189 12.3.3 全局成员特化 191 12.4 局部的类模板特化 194 12.5 本章后记 197 第13章 未来的方向 199 13.1 尖括号Hack 199 13.2 放松typename的原则 200 13.3 缺省函数模板实参 201 13.4 字符串文字和浮点型模板实参 202 13.5 放松模板的模板参数的匹配 204 13.6 typedef模板 206 13.7 函数模板的局部特化 207 13.8 typeof运算符 208 13.9 命名模板实参 210 13.10 静态属性 211 13.11 客户端的实例化诊断信息 212 13.12 重载类模板 214 13.13 List参数 215 13.14 布局控制 217 13.15 初始化器的演绎 218 13.16 函数表达式 219 13.17 本章后记 221 第3部分 模板与设计 223 第14章 模板的多态威力 225 14.1 动多态 225 14.2 静多态 228 14.3 动多态和静多态 231 14.3.1 术语 231 14.3.2 优点和缺点 232 14.3.3 组合这两种多态 232 14.4 新形式的设计模板 233 14.5 泛型程序设计 234 14.6 本章后记 236 第15章 trait与policy类 239 15.1 一个实例:累加一个序列 239 15.1.1 fixedtraits 240 15.1.2 valuetrait 243 15.1.3 参数化trait 247 15.1.4 policy和policy类 249 15.1.5 trait和policy:区别在何处 251 15.1.6 成员模板和模板的模板参数 252 15.1.7 组合多个policie和/或trait 254 15.1.8 运用普通的迭代器进行累积 255 15.2 类型函数 256 15.2.1 确定元素的类型 257 15.2.2 确定class类型 259 15.2.3 引用和限定符 261 15.2.4 promotiontrait 264 15.3 policytrait 267 15.3.1 只读的参数类型 268 15.3.2 拷贝、交换和移动 271 15.4 本章后记 275 第16章 模板与继承 277 16.1 命名模板参数 277 16.2 空基类优化 281 16.2.1 布局原则 281 16.2.2 成员作基类 284 16.3 奇特的递归模板模式 286 16.4 参数化虚拟性 289 16.5 本章后记 290 第17章 metaprogram 293 17.1 metaprogram的第一个实例 293 17.2 枚举值和静态常量 295 17.3 第2个例子:计算平方根 297 17.4 使用归纳变量 301 17.5 计算完整性 304 17.6 递归实例化和递归模板实参 304 17.7 使用metaprogram来展开循环 306 17.8 本章后记 309 第18章 表示式模板 313 18.1 临时变量和分割循环 314 18.2 在模板实参中编码表达式 319 18.2.1 表达式模板的操作数 320 18.2.2 Array类型 323 18.2.3 运算符 325 18.2.4 回顾 327 18.2.5 表达式模板赋值 329 18.3 表达式模板的性能与约束 330 18.4 本章后记 331 第4部分 高级应用程序 335 第19章 类型区分 337 19.1 辨别基本类型 337 19.2 辨别组合类型 340 19.3 辨别函数类型 342 19.4 运用重载解析辨别枚举类型 346 19.5 辨别class类型 348 19.6 辨别所有类型的函数模板 349 19.7 本章后记 352 第20章 智能指针 355 20.1 holder和trule 355 20.1.1 安全处理异常 356 20.1.2 holder 358 20.1.3 作为成员的holder 360 20.1.4 资源获取于初始化 362 20.1.5 holder的局限 363 20.1.6 复制holder 364 20.1.7 跨函数调用来复制holder 365 20.1.8 trule 366 20.2 引用记数 368 20.2.1 计数器在什么地方 370 20.2.2 并发访问计数器 370 20.2.3 析构和释放 371 20.2.4 CountingPtr模板 372 20.2.5 一个简单的非侵入式计数器 375 20.2.6 一个简单的侵入式计数器模板 377 20.2.7 常数性 378 20.2.8 隐式转型 379 20.2.9 比较 381 20.3 本章后记 383 第21章 tuple 385 21.1 duo 385 21.2 可递归duo 390 21.2.1 域的个数 390 21.2.2 域的类型 392 21.2.3 域的值 393 21.3 tuple构造 398 21.4 本章后记 403 第22章 函数对象和回调 405 22.1 直接调用、间接调用与内联调用 406 22.2 函数指针与函数引用 409 22.3 成员函数指针 411 22.4 class类型的仿函数 414 22.4.1 class类型仿函数的第1个实例 414 22.4.2 class类型仿函数的类型 416 22.5 指定仿函数 417 22.5.1 作为模板类型实参的仿函数 417 22.5.2 作为函数调用实参的仿函数 418 22.5.3 结合函数调用参数和模板类型参数 419 22.5.4 作为非类型模板实参的仿函数 420 22.5.5 函数指针的封装 421 22.6 内省 423 22.6.1 分析一个仿函数的类型 424 22.6.2 访问参数的类型 425 22.6.3 封装函数指针 426 22.7 函数对象组合 431 22.7.1 简单的组合 432 22.7.2 混合类型的组合 436 22.7.3 减少参数的个数 440 22.8 值绑定 443 22.8.1 选择绑定的目标 444 22.8.2 绑定签名 446 22.8.3 实参选择 447 22.8.4 辅助函数 453 22.9 仿函数操作:一个完整的实现 455 22.10 本章后记 457 附录A 一处定义原则 459 A.1 翻译单元 459 A.2 声明和定义 460 A.3 一处定义原则的细节 461 A.3.1 程序的一处定义约束 461 A.3.2 翻译单元的一处定义约束 463 A.3.3 跨翻译单元的等价性约束 465 附录B 重载解析 471 B.1 何时应用重载解析 472 B.2 简化过的重载解析 472 B.2.1 成员函数的隐含实参 474 B.2.2 细化完美匹配 476 B.3 重载的细节 477 B.3.1 非模板优先 477 B.3.2 转型序列 477 B.3.3 指针的转型 478 B.3.4 仿函数和代理函数 480 B.3.5 其他的重载情况 481 参考资料 483 术语表 487
|
亚马逊链接