C++ Templates中文版

C++ Templates中文版

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

一本C++模板编程的完全指南。

内容简介

本书是C++模板编程的完全指南,旨在通过基本概念、常用技巧和应用实例三方面的有用资料,为读者打下C++模板知识的坚实基础。

全书共22章。第1章全面介绍了全书的内容结构和相关情况。第1部分(第2~7章)以教程的风格介绍了模板的基本概念,第2部分(第8~13章)阐述了模板的语言细节,第3部分(第14~18章)介绍了C++模板所支持的基本设计技术,第4部分(第19~22章)深入探讨了各种使用模板的普通应用程序。附录A和附录B分别为一处定义原则和重载解析的相关资料。

本书适合C++模板技术的初学者阅读,也可供有一定编程经验的C++程序员参考。

作者简介

作者大卫·范德沃德,有20多年的C++工作经验,C++标准委员会成员。曾因为审校《The C++ Programming Language》一书的草稿,获得Bjarne Stroustrup的推荐,编写了《C++ Solutions》。

章节目录

版权信息

内容提要

译者序

致谢

致谢

Nico的致谢

David的致谢

第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

.template构造

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 其他的重载情况

参考资料

新闻组

书籍和网址

术语表

abstract class 抽象类

ADL

尖括号hack

尖括号

ANSI

argument 实参

argument-dependent lookup见ADL。

class 类

class template 类模板

class type class 类型

collection class 集合类

constant-expression

const member function const成员函数

container 容器 见集合类。

conversion operator 类型转换(转型) 运算符

CRTP

Curiously Recurring Template Pattern 奇异递归模板模式 见CRTP。

decay**

declaration 声明

deduction 演绎

definition 定义

dependent base class 依赖型基类

dependent name 依赖型名称

digraph 连字**

dot-C file dot-C文件

EBCO

Empty Base Class Optimization 空基类优化 见EBCO。

explicit instantiation directive 显式实例化指示符

explicit specialization 显式特化

expression template 表达式模板

friend name injection 友元名称插入

full specialization 全局特化 见显式特化。

function object 函数对象 见仿函数。

function template 函数模板

functor 仿函数**

header file 头文件

include file 被包含的文件 见头文件。

indirect call 间接调用

initializer 初始化器**

initializer list 初始化列表

injected class name 插入式类名称

instance 实例

instantiation 实例化

ISO

iterator 迭代器

linkable entity 可链接实体

lvalue 左值

member class template 成员类模板

member function template 成员函数模板

member template 成员模板

nondependent name 非依赖型名称

ODR

one-definition rule 一处定义原则 具体见ODR(one-definition rule)。

overload resolution 重载解析

parameter 参数

parameterized class 参数化类

parameterized function 参数化函数

partial specialization 局部特化

POD

POI

Point Of Instantiation 见POI。

policy class policy类

polymorphism 多态

precompiled header 预编译头文件

primary template 基本模板

qualified name 受限名称

reference counting 引用计数

rvalue 右值 见左值。

source file 源文件

specialization 特化

template 模板

template argument 模板实参

template argument deduction 模板实参演绎 见演绎。

template-id

template parameter 模板参数

trait template trait 模板

translation unit 翻译单元

true constant 见constant-expression。

tuple

two-phase lookup 两阶段查找

user-defined conversion 自定义的类型转换

whitespace 间隔符

C++ Templates中文版是2013年由人民邮电出版社出版,作者[美]DavidVandevoorde。

得书感谢您对《C++ Templates中文版》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
C++程序设计教程 电子书
全书共10章,第1章主要讲解了C++语言相对于C语言在基础知识上的扩充。第2—7章分别讲解了类与对象、继承与多态、运算符重载、模板、I/O流和异常。第8-9章分别讲解了STL、设计模式以及C++11的一些新特性,作为C++程序员,这一部分内容或早或晚都必须要学习,熟练掌握它们可使程序开发更加得心应手。第10章为项目实战,结合前面所学知识,开发了一个企业级项目——物流管理系统。
C++从入门到精通 电子书
C++基础知识、核心技术与提高篇实践项目。
C和C++游戏趣味编程 电子书
趣味案例教C/C++编程,激发学习兴趣,适合初学者自学。
C++ 开发从入门到精通 电子书
本书的特色是实现了入门知识、实例演示、范例演练、技术解惑、综合实战5大部分内容的融合,让读者看得懂、用得上、学得会。 一本书的容量,讲解了入门类、范例类和项目实战类三类图书的内容。 丰富的配套资源学习更高效 440个实例,更多的实践演练机会 837分钟视频讲解,降低学习难度 290个拓展实例,真正地举一反三 101个技术解惑,破解学习难点 “技术讲解”→范例演练”→“技术解惑”贯穿全书,全面掌握C++语言开发 技术讲解:通过145个实例,循序渐进地讲解了C开发的各个知识点。 范例演练:290个拓展范例和5个综合实例,使读者真正具有项目实战能力。 技术解惑:把容易混淆的概念单独讲解和剖析,帮助读者绕过学习中的陷阱。 QQ群 网站论坛实现教学互动,形成互帮互学的朋友圈 网站论坛:读者答疑/学习辅导/PPT资源下载读者 QQ群:疑惑快速解答/和作者直接交流
Visual C++ 程序设计教程 电子书
本书以VisualC++6.0为基础,详细阐述了VisualC++程序设计的基本原理和内容。全书以循序渐进的原则,构筑了VisualC++程序设计的几个模块,包括C++语法、WindowsC程序设计、简单应用程序框架及以此为基础的相关类和资源的使用、文档/视图结构及以此为基础的相关类和资源的使用。本书可作为普通高等院校、高职高专院校计算机及相关专业的教材,也可供应用开发人员和自学者参考。