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