内容简介
作者简介
Andrei Alexandrescu 世界顶尖的C++专家,C++ Users Journal杂志的专栏作家,他的Modern C++ Design一书曾荣获2001年最佳C++图书称号,所开发的Loki已经成为最负盛名的C++程序库之一。
本书目录
译序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.4templates带来曙光 6
1.5policies和policy classes 7
1.6更丰富的policies 12
1.7policy classes的析构函数(destructors) 12
1.8通过不完全具现化(incomplete instantiation)而获得的选择性机能(optional functionality) 13
1.9结合policy classes14
.1.10以policy classes定制结构16
1.11policies的兼容性 17
1.12将一个class分解为一堆policies 19
1.13摘要 20
第2章技术(techniques) 23
2.1编译期(compile-time)assertions23
2.2partial template specialization(模板偏特化)26
2.3局部类(local classes) 28
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.8type_info的一个外覆类(wrapper)37
2.9nulltype和emptytype 39
2.10type traits 40
2.11摘要 46
第3章typelists 49
3.1typelists的必要性 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自动产生classes 64
3.14摘要 74
3.15typelist要点概览 75
第4章小型对象分配技术(small-object allocation) 77
4.1缺省的free store分配器 78
4.2内存分配器的工作方式 78
4.3小型对象分配器(small-object allocator)80
4.4chunks(大块内存) 81
4.5大小一致(fixed-size)的分配器84
4.6smallobjallocator 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.1command设计模式 100
5.2真实世界中的command 102
5.3c++ 中的可呼叫体(callable entities) 103
5.4functor 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.16functor要点概览 126
第6章singletons(单件)实现技术 129
6.1静态数据 + 静态函数 != singleton130
6.2用以支持singleton的一些c++ 基本手法131
6.3实施“singleton的唯一性” 132
6.4摧毁singleton 133
6.5dead(失效的)reference问题 135
6.6解决dead reference问题(i):phoenix singleton 137
6.7解决dead reference问题(ii):带寿命的singletons139
6.8实现“带寿命的singletons” 142
6.9生活在多线程世界 145
6.10将一切组装起来 148
6.11使用singletonholder 153
6.12摘要 155
6.13singletonholder class template要点概览155
第7章smart pointers(智能指针)157
7.1smart pointers基础157
7.2交易 158
7.3smart pointers的存储160
7.4smart pointer的成员函数161
7.5拥有权(ownership)管理策略 163
7.6address-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.11smart pointers to const和const smart pointers 182
7.12arrays 183
7.13smart pointers和多线程(multithreading)184
7.14将一切组装起来187
7.15摘要 194
7.16smartptr要点概览194
第8章object factories(对象工厂)197
8.1为什么需要object factories198
8.2object factories in c++:classes和objects200
8.3实现一个object factory 201
8.4型别标识符(type identifiers)206
8.5泛化(generalization) 207
8.6细节琐务210
8.7clone factories(克隆工厂、翻制工厂、复制工厂)211
8.8通过其他泛型组件来使用object factories 215
8.9摘要 216
8.10factory class template要点概览 216
8.11clonefactory class template要点概览217
第9章abstract factory(抽象工厂)219
9.1abstract factory扮演的体系结构角色(architectural role)219
9.2一个泛化的abstract factory接口 223
9.3实作出abstractfactory 226
9.4一个prototype-based abstract factory实作品228
9.5摘要233
9.6abstractfactory和concretefactory要点概览233
第10章visitor(访问者、视察者)235
10.1visitor 基本原理235
10.2重载(overloading):catch-all函数 242
10.3一份更加精炼的实作品:acyclic visitor 243
10.4visitor之泛型实作248
10.5再论 "cyclic" visitor255
10.6变化手段 258
10.7摘要 260
10.8visitor泛型组件要点概览 261
第11章multimethods 263
11.1什么是multimethods?264
11.2何时需要multimethods?264
11.3double switch-on-type:暴力法265
11.4将暴力法自动化 268
11.5暴力式dispatcher 的对称性273
11.6对数型(logarithmic)double dispatcher276
11.7fndispatcher 和对称性 282
11.8double dispatch(双重分派)至仿函数(functors)282
11.9引数的转型:static_cast或dynamic_cast? 285
11.10常数时间的multimethods:原始速度(raw speed)290
11.11将basicdispatcher 和basicfastdispatcher当做policies293
11.12展望294
11.13摘要296
11.14double dispatcher要点概览297
附录一个超迷你的多线程程序库(a minimalist multithreading library)301
a.1多线程的反思302
a.2loki的作法303
a.3整数型别上的原子操作(atomic operations)303
a.4mutexes(互斥器)305
a.5面向对象编程中的锁定语意(locking semantics)306
a.6可有可无的(optional)volatile标识符308
a.7semaphores, events和其他好东西 309
a.8摘要309
参考书目(bibliography)311
索引(index) 313
· · · · · ·


