C++设计新思维:泛型编程与设计模式之应用

C++设计新思维:泛型编程与设计模式之应用
作 者: Andrei Alexandrescu 侯捷 於春景
出版社: 华中科技大学出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: C++
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

暂缺《C++设计新思维:泛型编程与设计模式之应用》作者简介

内容简介

ModernC++Design是一部重要的著作,它从根本上层示了genericpatterns(泛型模式)或patterntemplates(模式模板),并将它们视之为“在C++中创造可扩充设计”的一种功能强大的新方法,这种方法结合了template和patterns,你可能未曾想过,但的确存在。如果你的工作涉及C++设计和编程。那么你应该阅读本书。我极力推荐。——HerbSutter关于C++,还有什么没被说过的?很多,本书证明了这一点——节录自JohnVissides为本书所作的序在ModernC++Design中,Andrei,Alexandrescu为C++程序员开创了一个新天地。在展现非凡创造力和精湛编程技艺的同时,Alexandrescu提供了融合designpatterns(设计模式)、genericprogramming(泛型编程)、C++等在内的尖端设计技术。帮助程序员撰写清晰、灵活、高度可复用的代码。本书提出genericcomponents(泛型组件)的概念,这是一种可复用的设计模板(reusabledesigntemplates),用来产生规范的C++代码,供编译器使用。泛型组件提供了从design到code之间简易而无缝的过渡,产生出更能表达原始设计意图的代码,并支持设计结构的复用只需更动最少量的代码。作者阐释建造泛型组件所需的C++专门技巧和特性。而后针对现实世界中的应用,提供工业强度之泛型组件实现品。对于C++开发人员日常工作中反复遇到的问题,在此进行了深入的探讨,并通过泛型方式实现。内容包括:·高度灵活的policybaseddesign·Partialtemplatespecialization(模板偏特化)·Typelists,一个功能强大、用于型别操控的结构·Visitor、Singleton、Command、Factories等模式(patterns)·Multi-methodengine针对每一个泛型组件,本书都提出了基本问题和设计选择。最后实现其泛型解决方案、此外。本书相关网站http://www.awl.com/cseng/titles/0-201-70431-5提供书中泛型组件的所有实现品,并提供作者发展的一个免费、可下载的C++程序库Loki。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.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)