譯序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) 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.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自動産生classes 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) 313
· · · · · · (
收起)