| 作 者: | Andrei Alexandrescu 侯捷 於春景 |
| 出版社: | 华中科技大学出版社 |
| 丛编项: | |
| 版权说明: | 本书为公共版权或经版权方授权,请支持正版图书 |
| 标 签: | C++ |
| ISBN | 出版时间 | 包装 | 开本 | 页数 | 字数 |
|---|---|---|---|---|---|
| 未知 | 暂无 | 暂无 | 未知 | 0 | 暂无 |
译序by
侯捷
i
译序by
於春景
iii
目录
v
序言by
Scott
Meyers
xi
序言by
John
Vlissides
xv
前言
xvii
致谢
xxi
第一篇
技术(Techniques)
1
第1章
基于Policy的Class设计(Policy-Based
Class
Design)
3
1.1
软件设计的多样性(Multiplicity)
3
1.2
全功能型(Do-It-All)接口的失败
4
1.3
多重继承(Multiple
Inheritance)是救世主?
5
1.4
Templates带来曙光
6
1.5
Policies和Policy
Classes
7
1.6
更丰富的Policies
12
1.7
Policy
Classes的析构函数(Destructors)
12
1.8
通过不完全具现化(Incomplete
Instantiation)
而获得的选择性机能(Optional
Functionality)
13
1.9
结合Policy
Classes
14
1.10
以Policy
Classes定制结构
16
1.11
Policies的兼容性
17
1.12
将一个Class分解为一堆Policies
19
1.13
摘要
20
第2章
技术(Techniques)
23
2.1
编译期(Compile-Time)Assertions
23
2.2
Partial
Template
Specialization(模板偏特化)
26
2.3
局部类(Local
Classes)
2.4
常整数映射为型别(Mapping
Integral
Constants
to
Types)
29
2.5
型别对型别的映射(Type-to-Type
Mapping)
31
2.6
型别选择(Type
Selection)
33
2.7
编译期间侦测可转换性(Convertibility)和继承性(Inheritance)
34
2.8
type_info的一个外覆类(Wrapper)
37
2.9
NullType和EmptyType
39
2.10
Type
Traits
40
2.11
摘要
46
第3章
Typelists
49
3.1
Typelists的必要性
49
3.2
定义Typelists
51
3.3
将Typelist的生成线性化(linearizing)
52
3.4
计算长度
53
3.5
间奏曲
54
3.6
索引式访问(Indexed
Access)
55
3.7
查找Typelists
56
3.8
附加元素至Typelists
57
3.9
移除Typelist中的某个元素
58
3.10
移除重复元素(Erasing
Duplicates)
59
3.11
取代Typelist中的某个元素
60
3.12
为Typelists局部更换次序(Partially
Ordering)
61
3.13
运用Typelists自动产生Class
es
64
3.14
摘要
74
3.15
Typelist要点概览
75
第4章
小型对象分配技术(Small-Object
Allocation)
77
4.1
缺省的Free
Store分配器
78
4.2
内存分配器的工作方式
78
4.3
小型对象分配器(Small-Object
Allocator)
80
4.4
Chunks(大块内存)
81
4.5
大小一致(Fixed-Size)的分配器
84
4.6
SmallObjAllocator
Class
87
4.7
帽子下的戏法
89
4.8
简单,复杂,终究还是简单
92
4.9
使用细节
93
4.10
摘要
94
4.11
小型对象分配器(Small-Object
Allocator)要点概览
94
第二篇
组件(Components)
97
第5章
泛化仿函数(Generalized
Functors)
99
5.1
Command设计模式
100
5.2
真实世界中的Command
102
5.3
C++
中的可呼叫体(Callable
Entities)
103
5.4
Functor
Class
Template骨干
104
5.5
实现“转发式”(Forwarding)Functor::operator()
108
5.6
处理仿函数
110
5.7
做一个,送一个
112
5.8
引数(Argument)和返回型别(Return
Type)的转换
114
5.9
处理pointer
to
member
function(成员函数指针)
115
5.10
绑定(Binding)
119
5.11
将请求串接起来(Chaining
Requests)
122
5.12
现实世界中的问题之1:转发式函数的成本
122
5.13
现实世界中的问题之2:Heap分配
124
5.14
通过Functor实现Undo和Redo
125
5.15
摘要
126
5.16
Functor要点概览
126
第6章
Singletons(单件)实现技术
129
6.1
静态数据
+
静态函数
!=
Singleton
130
6.2
用以支持Singleton的一些C++
基本手法
131
6.3
实施“Singleton的唯一性”
132
6.4
摧毁Singleton
133
6.5
Dead(失效的)Reference问题
135
6.6
解决Dead
Reference问题(I):Phoenix
Singleton
137
6.7
解决Dead
Reference问题(II):带寿命的Singletons
139
6.8
实现“带寿命的Singletons”
142
6.9
生活在多线程世界
145
6.10
将一切组装起来
148
6.11
使用SingletonHolder
153
6.12
摘要
155
6.13
SingletonHolder
Class
Template要点概览
155
第7章
Smart
Pointers(智能指针)
157
7.1
Smart
Pointers基础
157
7.2
交易
158
7.3
Smart
Pointers的存储
160
7.4
Smart
Pointer的成员函数
161
7.5
拥有权(Ownership)管理策略
163
7.6
Address-of(取址)操作符
170
7.7
隐式转换(Implicit
Conversion)至原始指针型别
171
7.8
相等性(Equality)和不等性(Inequality)
173
7.9
次序比较(Ordering
Comparisons)
178
7.10
检测及错误报告(Checking
and
Error
Reporting)
181
7.11
Smart
Pointers
to
const和const
Smart
Pointers
182
7.12
Arrays
183
7.13
Smart
Pointers和多线程(Multithreading)
184
7.14
将一切组装起来
187
7.15
摘要
194
7.16
SmartPtr要点概览
194
第8章
Object
Factories(对象工厂)
197
8.1
为什么需要Object
Factories
198
8.2
Object
Factories
in
C++:Classes和Objects
200
8.3
实现一个Object
Factory
201
8.4
型别标识符(Type
Identifiers)
206
8.5
泛化(Generalization)
207
8.6
细节琐务
210
8.7
Clone
Factories(克隆工厂、翻制工厂、复制工厂)
211
8.8
通过其他泛型组件来使用Object
Factories
215
8.9
摘要
216
8.10
Factory
Class
Template要点概览
216
8.11
CloneFactory
Class
Template要点概览
217
第9章
Abstract
Factory(抽象工厂)
219
9.1
Abstract
Factory扮演的体系结构角色(Architectural
role)
219
9.2
一个泛化的Abstract
Factory接口
223
9.3
实作出AbstractFactory
226
9.4
一个Prototype-Based
Abstract
Factory实作品
228
9.5
摘要
233
9.6
AbstractFactory和ConcreteFactory要点概览
233
第10章
Visitor(访问者、视察者)
235
10.1
Visitor
基本原理
235
10.2
重载(Overloading):Catch-All函数
242
10.3
一份更加精炼的实作品:Acyclic
Visitor
243
10.4
Visitor之泛型实作
248
10.5
再论
"Cyclic"
Visitor
255
10.6
变化手段
258
10.7
摘要
260
10.8
Visitor泛型组件要点概览
261
第11章
Multimethods
263
11.1
什么是Multimethods?
264
11.2
何时需要Multimethods?
264
11.3
Double
Switch-on-Type:暴力法
265
11.4
将暴力法自动化
268
11.5
暴力式Dispatcher
的对称性
273
11.6
对数型(Logarithmic)Double
Dispatcher
276
11.7
FnDispatcher
和对称性
282
11.8
Double
Dispatch(双重分派)至仿函数(Functors)
282
11.9
引数的转型:static_cast或dynamic_cast?
285
11.10
常数时间的Multimethods:原始速度(Raw
Speed)
290
11.11
将BasicDispatcher
和BasicFastDispatcher当做Policies
293
11.12
展望
294
11.13
摘要
296
11.14
Double
Dispatcher要点概览
297
附录
一个超迷你的多线程程序库(A
Minimalist
Multithreading
Library)
301
A.1
多线程的反思
302
A.2
Loki的作法
303
A.3
整数型别上的原子操作(Atomic
Operations)
303
A.4
Mutexes(互斥器)
305
A.5
面向对象编程中的锁定语意(Locking
Semantics)
306
A.6
可有可无的(Optional)volatile标识符
308
A.7
Semaphores,
Events和其他好东西
309
A.8
摘要
309
参考书目(Bibliography)
311
索引(Index)