您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

C++ Templates 中文版 PDF 文档

时间:12-14来源:作者:点击数:
CDSY,CDSY.XYZ

C++ 似乎从它为世人所知的那天开始便成为天然的话题性编程语言。在它在周围有着形形色色的赞美与贬低之词。当我在微博上透露欲写此文的意愿时,也收到了很多褒贬不一的评论。作为一门语言,能拥有这么多使用并恨着它、使用并畏惧它的用户,也算是语言丛林里的奇观了。

目录

封面

扉页

译序 by 侯捷

译序 by 侯捷

译序 by 姜宏

目录

前言

致谢

1 关于本书(About This Book)

1.1 阅读本书之前你应该知道的事

1.2 本书组织结构

1.3 如何阅读本书

1.4 本书编程风格(Programming Style)

1.5 标准vs.现实(Standard versus Reality)

1.6 范例程式码及更多资讯

1.7 反馈(Feedback)

第一篇:基本认识(The Basics)

2 Function Templates(函式模板)

2.1 Function Templates初窥

2.1.1 定义Template

2.1.2 使用Template

2.2 引数推导(Argument Deduction)

2.3 Template Parameters(模板参数)

2.4 重载(Overloading)Function Templates

2.5 摘要

3 Class Templates(类别模板)

3.1 实作Class Template Stack

3.1.1 Class Templates的宣告

3.1.2 成员函式(Member Functions)的实作

3.2 使用Class Template Stack

3.3 Class Templates的特化(Specializations)

3.4 偏特化(Partial Specialization)

3.5 预设模板引数(Default Template Arguments)

3.6 摘要

4 Nontype Template Parameters(非型别模板参数)

4.1 Nontype Class Template Parameters (非型别类别模板参数)

4.2 Nontype Function Template Parameters(非型别函式模板参数)

4.3 Nontype Template Parameters的侷限

4.4 摘要

5 高层次基本技术(Tricky Basics)

5.1 关键字typename

5.2 使用this->

5.3 Member Templates(成员模板)

5.4 Template Template Parameters(双重模板参数)

5.5 零值初始化(Zero Initialization)

5.6以字串字面常数(String Literals)做为Function Templates Arguments

5.7 摘要

6 实际运用Templates

6.1 置入式模型(Inclusion Model)

6.1.1联结错误(Linker Errors)

6.1.2 把Templates放进表头档(Header Files)

6.2 显式具现化(Explicit Instantiation)

6.2.1 显式具现化(Explicit Instantiation)示例

6.2.2 结合置入式模型(Inclusion Model)和 显式具现化(Explicit Instantiation)

6.3 分离式模型(Separation Model)

6.3.1 关键字export

6.3.2 分离式模型(Separation Model)的侷限

6.3.3 为分离式模型(Separation Model)预做准备

6.4 Templates与关键字inline

6.5 预编译表头档(Precompiled Headers)

6.6 Templates的除错(Debugging)

6.6.1 解读长篇错误讯息(Decoding the Error Novel)

6.6.2 浅具现化(Shallow Instantiation)

6.6.3 长符号(Long Symbols)

6.6.4 追踪器(Tracers)

6.6.5 Oracles(铭码)

6.6.6 原型/模本(Archetypes)

6.7 后记

6.8 摘要

7 Template基本术语

7.1 是Class Template还是Template Class?

7.2 具现化(Instantiation)与特化(Specialization)

7.3 宣告(Declaration)vs. 定义(Definition)

7.4 单一定义规则(The One-Definition Rule)

7.5 Template Arguments(模板引数)vs. TemplateParameters(模板参数)

第二篇:深入模板(Templates in Depth)

8 基础技术更深入(Fundamentals in Depth)

8.1 参数化宣告(Parameterized Declarations)

8.1.1 虚拟成员函式(Virtual Member Functions)

8.1.2 Templates的联结(Linkage)

8.1.3 Primary Templates(主模板/原始模板)

8.2 Template Parameters(模板参数)

8.2.1 Type Parameters(型别参数)

8.2.2 Nontype Parameters(非型别参数)

8.2.3 Template Template Parameters(双重模板参数)

8.2.4 Default Template Arguments(预设的模板引数)

8.3 Template Arguments(模板引数)

8.3.1 Function Template Arguments(函式模板引数)

8.3.2 Type Arguments(型别引数)

8.3.3 Nontype Arguments(非型别引数)

8.3.4 Template Template Arguments(双重模板引数)

8.3.5等价(Equivalence)

8.4 Friends

8.4.1 Friend Functions

8.4.2 Friend Templates

8.5 后记

9 Templates内的名称

9.1名称分类学(Name Taxonomy)

9.2 名称查询(Looking Up Names)

9.2.1“相依于引数”的查询(Argument-Dependent Lookup, ADL)

9.2.2 Friend名称植入(Friend Name Injection)

9.2.3植入Class名称(Injected Class Names)

9.3 解析(Parsing)Templates

9.3.1 Nontemplates的前后脉络敏感性(Context Sensitivity)

9.3.2 型别的受控名称(Dependent Names )

9.3.3 Templates的受控名称(Dependent Names )

9.3.4 using宣告式中的受控名称(Dependent Names)

9.3.5 ADL和Explicit Template Arguments(明确模板引数)

9.4 衍生(Derivation)与Class Templates

9.4.1 非受控的(Nondependent)Base Classes

9.4.2 受控的(Dependent)Base Classes

9.5 后记

10 具现化/实体化(Instantiation)

10.1随需具现化(On-Demand Instantiation)

10.2缓式具现化(Lazy Instantiation)

10.3 C++具现化模型(C++ Instantiation Model)

10.3.1两段式查询(Two-Phase Lookup)

10.3.2具现点(Points of Instantiation)

10.3.3置入式(Inclusion)和分离式(Separation)模型

10.3.4跨越编译单元寻找POI

10.3.5举例

10.4实作方案(Implementation Schemes)

10.4.1贪婪式具现化(Greedy Instantiation)

10.4.2查询式具现化(Queried Instantiation)

10.4.3迭代式具现化(Iterated Instantiation)

10.5明确具现化(Explicit Instantiation)

10.6后记

11 Template引数推导(Template Argument Deduction)

11.1 推导过程(Deduction Process)

11.2 推导之前后脉络(Deduced Contexts)

11.3 特殊推导情境(Special Deduction Situations)

11.4 可接受的引数转型(Allowable Argument Conversions)

11.5 Class Template Parameters(类别模板参数)

11.6 预设的呼叫引数(Default Call Arguments)

11.7 Barton-Nackman Trick

11.8 后记

12 特化与重载(Specialization and Overloading)

12.1当泛型码(Generic Code)不合用...

12.1.1 透通订制(Transparent Customization)

12.1.2 语意的透通性(Semantic Transparency)

12.2 重载Function Templates

12.2.1 Signatures(署名式)

12.2.2 Partial Ordering of Overloaded Function Templates重载化函式模板的偏序规则

12.2.3 Formal Ordering Rules(正序规则)

12.2.4 Templates和Nontemplates

12.3 明确特化(显式特化;Explicit Specialization)

12.3.1 Class Template全特化(Full Specialization)

12.3.2 Function Template全特化(Full Specialization)

12.3.3 Member全特化(Full Specialization)

12.4 Class Template偏特化(Partial Specialization)

12.5后记

13 未来发展方向(Future Directions)

13.1 Angle Bracket Hack(角括号对付法)

13.2 宽鬆的typename使用规则

13.3 Function Template的预设引数

13.4 以字串字面常数(String Literal)和浮点数(Floating-Point)作为Template Arguments

13.5 Template Template Parameters的宽鬆匹配规则

13.6 Typedef Templates

13.7 Function Templates偏特化(partial specialization)

13.8 typeof运算子

13.9 Named Template Arguments(具名模板引数)

13.10 静态属性(Static Properties)

13.11 订制的具现化诊断讯息(Custom Instantiation Diagnostics)

13.12 经过重载的(Overloaded)Class Templates

13.13 List Parameters(一系列参数)

13.14 佈局控制(Layout Control)

13.15 初始式的推导(Initializer Deduction)

13.16 Function Expressions(函式运算式)

13.17 后记

第三篇:模板与设计(Templates and Design)

14 Templates的多型威力(The Polymorphic Power of Templates)

14.1 动态多型(Dynamic Polymorphism)

14.2 静态多型(Static Polymorphism)

14.3 动态多型vs.静态多型

14.4 Design Patterns(设计范式)的新形式

14.5 泛型编程(Generic Programming)

14.6 后记

15 Traits(特徵萃取)和Policy Classes(策略类别)

15.1 示例:序列的累计(Accumulating a Sequence)

15.1.1 Fixed Traits(固定式特徵)

15.1.2 Value Traits(数值式特徵)

15.1.3 Parameterized Traits(参数式特徵)

15.1.4 Policies(策略)和Policy Classes(策略类别)

15.1.5 Traits和Policies有何差异?

15.1.6 Member Templates vs. Template Template Parameters

15.1.7 联合多个Policies和/或Traits

15.1.8 以泛型迭代器(General Iterators)进行累计(Accumulation)

15.2 Type Functions(译注:对比于Value Functions)

15.2.1 决定元素型别(Element Types)

15.2.2 确认是否为Class Types

15.2.3 References(引用)和Qualifiers(饰词)

15.2.4 Promotion Traits(型别晋升之特徵萃取)

15.3 Policy Traits

15.3.1 惟读的参数型别(Read-only Parameter Types)

15.3.2 拷贝(Copying)、置换(Swapping)和搬移(Moving)

15.4 后记

16 Templates(模板)与Inheritance(继承)

16.1 具名的Template Arguments(模板引数)

16.2 EBCO(Empty Base Class Optimization, 空基础类别优化)

16.2.1佈局原理(Layout Principles)

16.2.2将成员(Members)改为Base Classes

16.3 CRTP(Curiously Recurring Template Pattern,奇特递迴模板范式)

16.4 将虚拟性(Virtuality)参数化

16.5 后记

17 Metaprograms(超程式)

17.1 第一个Metaprogram示例

17.2 Enum数值vs. Static常数

17.3 第二个例子:计算平方根(Square Root)

17.4 使用“归纳变数”(Induction Variables)

17.5 计算的完全性(Computational Completeness)

17.6 递迴具现化(Recursive Instantiation)vs. 递迴模板引数(Recursive Template Arguments)

17.7 运用Metaprograms来铺展(Unroll)迴圈

17.8 后记

18 Expression Templates (算式模板)

18.1 暂时物件和分解迴圈(Split Loops)

18.2 Encoding Expressions in Template Arguments

18.2.1 Expression Templates的运算元(Operands)

18.2.2 Array型别

18.2.3 运算子(Operators)

18.2.4 回顾

18.2.5 Expression Templates的赋值动作(Assignments)

18.3 Expression Templates的效能和极限

18.4 后记

第四篇:高阶应用(Advanced Applications)

19 型别分类(Type Classification)

19.1 确定是否为基础型别(Fundamental Types)

19.2 确定是否为Compound(複合)型别

19.3 辨识Function型别

19.4 运用重载决议(Overload Resolution)区分Enum型别

19.5 确定是否为Class型别

19.6 熔于一炉

19.7 后记

20 Smart Pointers(灵巧指标)

20.1 Holders和Trules

20.1.1防范异常(Exceptions)

20.1.2 Holders(持有者)

20.1.3 将Holders当做成员

20.1.4 初始化阶段便索取资源(Resource Acquisition Is Initialization)

20.1.5 Holder的侷限

20.1.6 Copying Holders

20.1.7 跨函式呼叫(Across Function Calls)地进行Copying Holders

20.1.8 Trules

20.2 引用计数(Reference Counting)

20.2.1 计数器置于何处?

20.2.2 并行存取计数器(Concurrent Counter Access)

20.2.3 解构和归还(Destruction and Deallocation)

20.2.4 CountingPtr Template

20.2.5 一个简单的“非侵入式计数器”(Noninvasive Counter)

20.2.6 一个简单的“侵入式计数器模板”(Invasive Counter Template)

20.2.7 常数性(Constness)

20.2.8 隐式转型(Implicit Conversions)

20.2.9 Comparisons(比较)运算子

20.3 后记

21 Tuples(三部合成构件)

21.1 Duos(二重唱/二人组)

21.2 递迴的(Recursive)Duos

21.2.1 栏位的数量(Number of Fields)

21.2.2 栏位的型别(Type of Fields)

21.2.3 栏位的数值(Value of Fields)

21.3 Tuple的建构(Construction)

21.4 后记

22 Function Objects(函式物件)与Callbacks(回呼)

22.1 直接、间接和内联呼叫(Direct, Indirect, and Inline Calls)

22.2 Pointers to Functions和References to Functions

22.3 Pointer-to-Member Functions

22.4 以Class形式呈现的Functors(所谓Class Type Functors)

22.4.1 Class Type Functors的第一个实例

22.4.2 Class Type Functors 的型别

22.5 如何指定Functors(仿函式)

22.5.1 以Template Type Arguments姿态出现的Functors

22.5.2 以Function Call Arguments 姿态出现的Functors

22.5.3 结合Function Call Parameters和Template Type Parameters

22.5.4 以Nontype Template Arguments姿态出现的Functors

22.5.5 Function Pointer Encapsulation

22.6 自省(Introspection)

22.6.1 分析Functor(仿函式)型别

22.6.2 取用参数型别(Accessing Parameter Types)

22.6.3 封装(Encapsulating)Function Pointers

22.7 Function Object 的複合(Composition)

22.7.1 简式複合(Simple Composition)

22.7.2 混式複合(Mixed Type Composition)

22.7.3 减少参数个数

22.8 Value Binders(繫值器)

22.8.1 对繫结进行选择(Selecting the Binding)

22.8.2 Bound Signature

22.8.3 引数的选择

22.8.4 便捷函式(Convenience Functions)

22.9 Functor(仿函式)操作:一个完整实作品

22.10 后记

附录

A 单一定义规则(ODR, One-Definition Rule)

A.1 编译单元(Translation Units)

A.2 宣告(Declarations)和定义(Definitions)

A.3 单一定义规则(ODR)细节

A.3.1约束一:每个程式只能有一份定义

A.3.2约束二:每个编译单元只能有一份定义

A.3.3约束三:跨编译单元必须等价(Equivalence)

B 重载决议机制(Overload Resolution)

B.1 重载决议机制何时介入?

B.2 精简版重载决议机制

B.2.1 成员函式的隐含引数

B.2.2 完美匹配(Perfect Match)精解

B.3 重载(Overloading)细节

B.3.1 优先选定Nontemplates

B.3.2 转换序列(Conversion Sequences)

B.3.3 指标转型(Pointer Conversions)

B.3.4仿函式(Functors)和代理函式(Surrogate Functions)

B.3.5 其他重载情境(Other Overloading Contexts)

C 参考书目和资源(Bibliography)

C.1 新闻群组(Newsgroups)

C.2 书籍和Web网站

D 词彙和术语(Glossary)

索引

下载地址:https://bbs.cdsy.xyz/thread-23047-1-1.html

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐