《C++设计新思维 泛型编程与设计模式之应用》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:(美)Andrei Alexandrescu著;侯捷,于春景译
  • 出 版 社:武汉:华中科技大学出版社
  • 出版年份:2003
  • ISBN:7560929060
  • 页数:323 页
图书介绍:ModernC++Design是一部重要的著作,它从根本上层示了genericpatterns(泛型模式)或patterntemplates(模式模板),并将它们视之为“在C++中创造可扩充设计”的一种功能强大的新方法,这种方法结合了template和patterns,你可能未曾想过,但的确存在。如果你的工作涉及C++设计和编程。那么你应该阅读本书。我极力推荐。——HerbSutter关于C++,还有什么没被说过的?很多,本书证明了这一点——节录自JohnVissides为本书所作的序在ModernC++Design中,Andrei,Alexandrescu为C++程序员开创了一个新天地。在展现非凡创造力和精湛编程技艺的同时,Alexandrescu提供了融合designpatterns(设计模式)、genericprogramming(泛型编程)、C++等在内的尖端设计技术。帮助程序员撰写清晰、灵活、高度可复用的代码。本书提出genericcomponents(泛型组件)的概念,这是一种可复用的设计模板(reusabledesigntemplates),用来产生规范的C++代码,供编

第一篇 技术(Techniques) 1

第一章 基于Policy的Class设计(Policy-Based Class Design) 3

1.1 软件设计的多样性(Multiplicity) 3

1.2 全功能型(Do-At-All)接口的失败 4

1.3 多重继承(Multiple Inheritance)是救世主? 5

1.4 Templates带来曙光 6

1.5 Policies和Policy Classes 7

1.7 Policy Classes的析构函数(Destructors) 12

1.6 更丰富的Policies 12

1.8 通过不完全具现化而获得的选择性机能 13

1.9 结合Policy Calsses 14

1.10 以Policy Calsses定制结构 16

1.11 Policy的兼容性 17

1.12 将一个Calss分解为一堆Policies 19

1.13 摘要 20

第二章 技术(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.1 Typelists的必要性 49

第三章 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 移除Typelists中的某个元素 58

3.10移除重复元素(Erasing Duplicates) 59

3.11 取代Typelists中的某个元素 60

3.12 为Typelists局部更换次序(Partially Ordering) 61

3.13 运用Typelists自动产生Classes 64

3.14 摘要 74

3.15 Typelist要点概览 75

第四章 小型对象分配技术(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 SmallObj Allocator Class 87

4.7 帽子下的戏法 89

4.8 简单,复杂,终究还是简单 92

4.9 使用细节 93

4.10 摘要 94

4.11 小型对象分配器(Small-Object Allocator)要点概览 94

第二篇 组件(Components) 97

第五章 泛化仿函数(Generalized Functors) 99

5.1 设计模式 100

5.2 真实世界中的 102

5.3 C++中的可调用体(Callable Entities) 103

5.4 Functor Class Template骨干 104

5.5 实现“转发式”(Forwarding)Functor::operator() 108

5.6 处理Pointer to member function仿函数 110

5.7 做一个,送一个 112

5.8 引数和返回型别的转换 114

5.9 处理Pointer to member function(成员函数指针) 115

5.10 绑定(Binding) 119

5.12 现实世界中的问题之一:转发函数的成本 122

5.11 将请求串接起来(Chaining Requests) 122

5.13 现实世界中的问题之二:分配 124

5.14 通过Functor实现Undo和Redo 125

5.15 摘要 126

5.16 Functor要点概览 126

第六章 Singletons(单件)实作技术 129

6.1 静态数据+静态函数!=Singleton 130

6.2 用以支持的一些C++基本手法 131

6.3 实施“Singleton的唯一性” 132

6.4 摧毁Singleton 133

6.5 Dead(失效的)Reference问题 135

6.6 解决Dead Reference问题(一):Phoenix Singleton 137

6.7 解决Dead Reference问题(二):带寿命的Singletons 139

6.8 实现“带寿命的Singleton” 142

6.9 生活在多线程世界 145

6.10 将一切组装起来 148

6.11 使用SingletonHolder 153

6.12 摘要 155

6.13 SingletonHolder Class Template要点概览 155

7.1 Smart Pointers基础 157

第七章 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

第八章 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 通过其他泛型组件来使用Clone Factories 215

8.9 摘要 216

8.10 Factory Class Template要点概览 216

8.11 Clone Factory Class Template要点概览 217

第九章 Abstract Factory(抽象工厂) 219

9.1 Abstract Factory扮演的体系结构角色(Architectural role) 219

9.2 一个泛化的Abstract Factory接口 223

9.3 实作出Abstract Factory 226

9.4 一个Prototype-Based Abstract Factory实作品 228

9.5 摘要 233

9.6 Abstract Factory和ConcreteFactory要点概览 233

第十章 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

第十一章 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 面向对象编程中的锁定语义(Atomic Operations) 306

A.6 可有可无的(Optional)volatile饰词 308

A.7 Semaphores,Events和其他好东西 309

A.8 摘要 309

参考书目(Bibliography) 311

索引(Index) 313