第0 章导读..................................................1
0.1 关于本书.........................................1
0.2 读者对象.........................................1
0.3 术语与风格.....................................2
0.4 C++标准..........................................3
0.5 本书的结构.....................................4
0.6 如何阅读本书..................................5
0.7 本书的源码.....................................5
第1 章 Boost 程序库总论...........................7
1.1 关于Boost .......................................7
1.1.1 获取方式................................... 8
1.1.2 目录结构................................... 8
1.1.3 使用方式................................... 9
1.2 开发环境.........................................9
1.2.1 操作系统和编译器................. 10
1.2.2 快捷安装Boost ....................... 10
1.2.3 完全安装Boost ....................... 10
1.2.4 定制安装Boost ....................... 11
1.2.5 验证开发环境......................... 11
1.3 构建工具.......................................12
1.3.1 安装b2 .................................... 12
1.3.2 构建脚本................................. 12
1.3.3 构建语言................................. 13
1.3.4 构建命令................................. 14
1.4 总结...............................................14
第2 章时间与日期.....................................15
2.1 timer 库概述..................................15
2.2 timer...............................................16
2.2.1 用法......................................... 16
2.2.2 类摘要..................................... 17
2.2.3 使用建议................................. 18
2.3 progress_timer ...............................18
2.3.1 用法......................................... 18
2.3.2 类摘要..................................... 19
2.4 progress_display ............................20
2.4.1 类摘要..................................... 20
2.4.2 用法......................................... 21
2.4.3 注意事项................................. 22
2.5 date_time库概述...........................23
2.5.1 编译与使用............................. 24
2.5.2 基本概念................................. 24
2.6 处理日期.......................................25
2.6.1 日期......................................... 25
2.6.2 创建日期对象......................... 26
2.6.3 访问日期................................. 27
2.6.4 日期的输出............................. 28
2.6.5 转换tm 结构........................... 29
2.6.6 日期长度................................. 29
2.6.7 日期运算................................. 31
2.6.8 日期区间................................. 32
2.6.9 日期区间运算......................... 33
2.6.10 日期迭代器........................... 35
2.6.11 其他功能............................... 36
2.6.12 综合运用............................... 36
2.7 处理时间.......................................39
2.7.1 时间长度................................. 39
2.7.2 操作时间长度......................... 40
2.7.3 时间长度的精确度................. 42
2.7.4 时间点..................................... 43
2.7.5 创建时间点对象..................... 44
2.7.6 操作时间点对象..................... 45
2.7.7 转换tm/time_t结构................ 46
2.7.8 时间区间................................. 46
2.7.9 时间迭代器............................. 47
2.7.10 综合运用............................... 47
2.8 date_time库的高级议题...............50
2.8.1 编译配置宏............................. 50
2.8.2 自定义字面值......................... 51
2.8.3 格式化时间............................. 51
2.8.4 本地时间................................. 52
2.8.5 序列化..................................... 54
2.9 总结...............................................54
第3 章内存管理.........................................57
3.1 smart_ptr库概述...........................57
3.1.1 RAII 机制................................ 57
3.1.2 智能指针................................. 58
3.2 scoped_ptr......................................59
3.2.1 类摘要..................................... 59
3.2.2 操作函数................................. 60
3.2.3 用法......................................... 61
3.2.4 对比unique_ptr....................... 63
3.2.5 make_unique............................ 64
3.3 scoped_array ..................................65
3.3.1 类摘要..................................... 65
3.3.2 用法......................................... 66
3.3.3 对比unique_ptr....................... 66
3.3.4 使用建议................................. 67
3.4 shared_ptr.......................................68
3.4.1 类摘要..................................... 68
3.4.2 操作函数................................. 69
3.4.3 用法......................................... 70
3.4.4 工厂函数................................. 72
3.4.5 应用于标准容器..................... 73
3.4.6 应用于桥接模式..................... 74
3.4.7 应用于工厂模式..................... 75
3.4.8 定制删除器............................. 77
3.4.9 高级议题................................. 78
3.5 shared_array...................................82
3.5.1 类摘要..................................... 82
3.5.2 用法......................................... 82
3.6 weak_ptr.........................................83
3.6.1 类摘要..................................... 83
3.6.2 用法......................................... 84
3.6.3 enable_shared_from_this......... 85
3.6.4 enable_shared_from_raw......... 86
3.6.5 打破循环引用......................... 88
3.7 intrusive_ptr ...................................89
3.7.1 类摘要..................................... 89
3.7.2 用法......................................... 90
3.7.3 引用计数器............................. 91
3.8 pool 库概述...................................92
3.9 pool ................................................93
3.9.1 类摘要..................................... 93
3.9.2 操作函数................................. 94
3.9.3 用法......................................... 95
3.10 object_pool...................................95
3.10.1 类摘要................................... 96
3.10.2 操作函数............................... 96
3.10.3 用法....................................... 97
3.10.4 使用更多的构造参数............ 97
3.11 singleton_pool..............................99
3.11.1 类摘要................................... 99
3.11.2 用法....................................... 99
3.12 pool_alloc...................................100
3.13 总结...........................................101
第4 章实用工具.......................................103
4.1 noncopyable .................................103
4.1.1 原理....................................... 104
4.1.2 用法....................................... 104
4.1.3 实现....................................... 105
4.2 ignore_unused..............................106
4.2.1 基本用法............................... 106
4.2.2 模板用法............................... 107
4.3 optional ........................................108
4.3.1 类摘要................................... 108
4.3.2 操作函数............................... 109
4.3.3 用法....................................... 111
4.3.4 工厂函数............................... 112
4.4 assign ........................................... 113
4.4.1 list_inserter ............................ 113
4.4.2 使用operator+=..................... 114
4.4.3 使用operator () ..................... 115
4.4.4 generic_list............................. 116
4.4.5 初始化容器........................... 117
4.4.6 减少重复输入....................... 119
4.4.7 操作非标准容器................... 120
4.4.8 其他议题............................... 121
4.5 swap .............................................122
4.5.1 原理....................................... 122
4.5.2 交换数组............................... 123
4.5.3 特化std::swap ....................... 124
4.5.4 特化ADL 可找到的swap.... 125
4.5.5 使用建议............................... 126
4.6 singleton.......................................126
4.6.1 类摘要................................... 126
4.6.2 用法....................................... 127
4.7 tribool...........................................128
4.7.1 类摘要................................... 129
4.7.2 用法....................................... 130
4.7.3 为第三态更名....................... 131
4.7.4 输入/输出.............................. 131
4.7.5 与optional<bool>的区别...... 132
4.8 operators.......................................133
4.8.1 基本运算概念....................... 134
4.8.2 算术操作符的用法............... 135
4.8.3 基类链................................... 137
4.8.4 复合运算概念....................... 138
4.8.5 相等与等价........................... 140
4.8.6 解引用操作符....................... 141
4.8.7 下标操作符........................... 142
4.8.8 bool转型操作符................... 143
4.8.9 二元操作符........................... 145
4.9 exception......................................145
4.9.1 标准库中的异常................... 146
4.9.2 类摘要................................... 146
4.9.3 向异常传递信息................... 148
4.9.4 错误信息类........................... 149
4.9.5 包装标准异常....................... 151
4.9.6 使用函数抛出异常............... 152
4.9.7 获得更多的调试信息........... 152
4.9.8 高级议题............................... 154
4.10 uuid ............................................155
4.10.1 类摘要................................. 156
4.10.2 用法..................................... 157
4.10.3 生成器................................. 158
4.10.4 增强的uuid类.................... 160
4.10.5 转换字符串......................... 162
4.10.6 SHA1 摘要算法.................. 163
4.11 config .........................................164
4.11.1 BOOST_STRINGIZE.......... 164
4.11.2 BOOST_STATIC_
CONSTANT........................ 165
4.12 utility..........................................165
4.12.1 BOOST_BINARY ............... 165
4.12.2 BOOST_CURRENT_
FUNCTION......................... 167
4.13 总结...........................................168
第5 章字符串与文本处理.......................171
5.1 lexical_cast...................................171
5.1.1 函数声明............................... 172
5.1.2 用法....................................... 172
5.1.3 错误处理............................... 173
5.1.4 对转换对象的要求............... 174
5.1.5 应用于自定义类................... 175
5.1.6 对比C++11 标准.................. 176
5.2 format...........................................177
5.2.1 简单的例子........................... 178
5.2.2 输入操作符%........................ 179
5.2.3 类摘要................................... 180
5.2.4 格式化语法........................... 182
5.2.5 format 的性能........................ 183
5.2.6 高级用法............................... 183
5.3 string_ref......................................184
5.3.1 类摘要................................... 185
5.3.2 用法....................................... 186
5.4 string_algo ...................................188
5.4.1 简单的例子........................... 188
5.4.2 string_algo概述.................... 189
5.4.3 大小写转换........................... 190
5.4.4 判断式(算法) ................... 191
5.4.5 判断式(函数对象) ........... 193
5.4.6 分类....................................... 193
5.4.7 修剪....................................... 194
5.4.8 查找....................................... 195
5.4.9 替换与删除........................... 197
5.4.10 分割..................................... 199
5.4.11 合并..................................... 200
5.4.12 查找(分割)迭代器......... 201
5.5 tokenizer.......................................203
5.5.1 类摘要................................... 203
5.5.2 用法....................................... 204
5.5.3 分词函数对象....................... 204
5.5.4 char_separator........................ 205
5.5.5 escaped_list_separator ........... 206
5.5.6 offset_separator ..................... 207
5.5.7 tokenizer库的缺陷............... 208
5.6 xpressive ......................................210
5.6.1 两种使用方式....................... 210
5.6.2 正则表达式语法简介........... 211
5.6.3 类摘要................................... 212
5.6.4 正则匹配............................... 214
5.6.5 正则查找............................... 217
5.6.6 正则替换............................... 218
5.6.7 正则迭代............................... 219
5.6.8 正则分词............................... 221
5.6.9 对比boost.regex.................... 222
5.6.10 高级议题............................. 223
5.7 总结.............................................225
第6 章正确性与测试...............................227
6.1 assert ............................................227
6.1.1 基本用法............................... 227
6.1.2 禁用断言............................... 229
6.1.3 扩展用法............................... 229
6.2 static_assert..................................231
6.2.1 定义....................................... 231
6.2.2 用法....................................... 231
6.2.3 使用建议............................... 233
6.3 lightweight_test............................233
6.3.1 测试断言............................... 233
6.3.2 用法....................................... 234
6.3.3 测试元编程........................... 235
6.4 test................................................235
6.4.1 最小化的测试套件............... 236
6.4.2 单元测试框架简介............... 237
6.4.3 测试断言............................... 238
6.4.4 测试用例与测试套件............ 239
6.4.5 测试实例............................... 240
6.4.6 测试夹具............................... 242
6.4.7 测试日志............................... 244
6.4.8 运行参数............................... 245
6.4.9 函数执行监视器................... 246
6.4.10 程序执行监视器................. 249
6.4.11 高级议题............................. 249
6.5 总结.............................................251
第7 章容器与数据结构...........................253
7.1 array .............................................253
7.1.1 类摘要................................... 254
7.1.2 操作函数............................... 254
7.1.3 用法....................................... 255
7.1.4 能力限制............................... 256
7.1.5 初始化................................... 257
7.1.6 零长度的数组....................... 257
7.1.7 对比C++11 标准.................. 258
7.2 dynamic_bitset .............................258
7.2.1 类摘要................................... 259
7.2.2 创建与赋值........................... 260
7.2.3 容器操作............................... 261
7.2.4 位运算与比较运算............... 262
7.2.5 访问元素............................... 263
7.2.6 类型转换............................... 264
7.2.7 集合操作............................... 265
7.2.8 综合运用............................... 265
7.3 unordered .....................................267
7.3.1 散列集合简介....................... 267
7.3.2 散列集合的用法................... 269
7.3.3 散列映射简介....................... 271
7.3.4 散列映射的用法................... 272
7.3.5 高级议题............................... 274
7.4 bimap ...........................................276
7.4.1 类摘要................................... 276
7.4.2 基本用法............................... 277
7.4.3 值的集合类型....................... 278
7.4.4 集合类型的用法................... 279
7.4.5 使用标签类型....................... 281
7.4.6 使用assign 库....................... 282
7.4.7 查找与替换........................... 283
7.4.8 投射....................................... 285
7.4.9 高级议题............................... 285
7.5 circular_buffer..............................286
7.5.1 类摘要................................... 287
7.5.2 用法....................................... 288
7.5.3 环形缓冲区........................... 288
7.5.4 空间优化型缓冲区............... 290
7.6 tuple .............................................290
7.6.1 最简单的tuple:pair............... 291
7.6.2 类摘要................................... 292
7.6.3 创建与赋值........................... 292
7.6.4 访问元素............................... 293
7.6.5 比较操作............................... 295
7.6.6 输入输出............................... 295
7.6.7 联结变量............................... 296
7.6.8 应用于assign 库................... 297
7.6.9 应用于exception 库.............. 298
7.6.10 内部结构............................. 298
7.6.11 使用访问者模式................. 299
7.6.12 高级议题............................. 301
7.7 any................................................303
7.7.1 类摘要................................... 303
7.7.2 访问元素............................... 304
7.7.3 用法....................................... 305
7.7.4 简化的操作函数................... 306
7.7.5 保存指针............................... 307
7.7.6 输出....................................... 308
7.7.7 应用于容器........................... 309
7.8 variant ..........................................310
7.8.1 类摘要................................... 310
7.8.2 访问元素............................... 311
7.8.3 用法....................................... 312
7.8.4 访问器................................... 313
7.8.5 与any 的区别........................ 315
7.8.6 高级议题............................... 316
7.9 multi_array...................................317
7.9.1 类摘要................................... 318
7.9.2 用法....................................... 319
7.9.3 改变形状和大小................... 321
7.9.4 创建子视图........................... 321
7.9.5 适配普通数组....................... 323
7.9.6 高级议题............................... 324
7.10 property_tree..............................326
7.10.1 类摘要................................. 327
7.10.2 读取配置信息..................... 328
7.10.3 写入配置信息..................... 330
7.10.4 更多用法............................. 331
7.10.5 XML 数据格式.................... 332
7.10.6 其他数据格式..................... 333
7.10.7 高级议题............................. 335
7.11 总结............................................336
第8 章算法..............................................339
8.1 foreach .........................................339
8.1.1 用法....................................... 340
8.1.2 详细解说............................... 341
8.1.3 更优雅的名字....................... 342
8.1.4 支持的序列类型................... 343
8.1.5 存在的问题........................... 344
8.2 minmax ........................................344
8.2.1 用法....................................... 345
8.2.2 存在的问题........................... 345
8.3 minmax_element..........................346
8.3.1 用法....................................... 346
8.3.2 其他函数的用法................... 347
8.4 algorithm......................................348
8.4.1 clamp ..................................... 348
8.4.2 clamp_range .......................... 349
8.4.3 hex 和unhex ......................... 349
8.5 总结.............................................350
第9 章数学与数字...................................353
9.1 math.constants..............................353
9.1.1 基本用法............................... 354
9.1.2 高级用法............................... 355
9.2 integer ..........................................355
9.2.1 integer_traits.......................... 355
9.2.2 标准整数类型....................... 357
9.2.3 整数类型模板类................... 359
9.3 rational .........................................362
9.3.1 类摘要................................... 362
9.3.2 创建与赋值........................... 363
9.3.3 算术运算与比较运算........... 364
9.3.4 类型转换............................... 365
9.3.5 输入输出............................... 365
9.3.6 分子与分母........................... 365
9.3.7 与数学函数配合工作............ 366
9.3.8 rational 的精确度.................. 366
9.3.9 最大公约数和最小公倍数.... 366
9.4 ratio ..............................................367
9.4.1 类摘要................................... 367
9.4.2 用法....................................... 368
9.4.3 数字单位............................... 369
9.4.4 字符串表示........................... 371
9.4.5 对比C++11 标准.................. 372
9.5 crc ................................................372
9.5.1 类摘要................................... 372
9.5.2 预定义的实现类................... 373
9.5.3 用法....................................... 373
9.6 random.........................................375
9.6.1 随机数发生器....................... 375
9.6.2 随机数发生器的拷贝............ 377
9.6.3 随机数分布器....................... 377
9.6.4 随机数分布器类摘要............ 378
9.6.5 随机数分布器用法............... 381
9.6.6 变量发生器........................... 382
9.6.7 产生随机数据块................... 383
9.6.8 真随机数发生器................... 384
9.6.9 实现真随机数发生器............ 385
9.7 总结.............................................387
第10 章操作系统相关............................389
10.1 system ........................................389
10.1.1 错误值枚举......................... 390
10.1.2 错误类别............................. 390
10.1.3 错误代码............................. 392
10.1.4 错误异常............................. 394
10.2 chrono ........................................395
10.2.1 时间长度............................. 395
10.2.2 使用时间长度..................... 396
10.2.3 时钟..................................... 398
10.2.4 时间点................................. 400
10.2.5 综合运用............................. 402
10.3 cpu_timer ...................................404
10.3.1 时间类型............................. 404
10.3.2 cpu_timer............................. 405
10.3.3 auto_cpu_timer .................... 406
10.3.4 定制输出格式..................... 407
10.4 filesystem ...................................408
10.4.1 类摘要................................. 409
10.4.2 路径表示............................. 411
10.4.3 可移植的文件名................. 412
10.4.4 路径处理............................. 413
10.4.5 异常处理............................. 415
10.4.6 文件状态............................. 416
10.4.7 文件属性............................. 418
10.4.8 文件操作............................. 419
10.4.9 迭代目录............................. 420
10.4.10 实例1:实现查找
文件功能........................... 423
10.4.11 实例2:实现模糊查找
文件功能........................... 424
10.4.12 实例3:实现拷贝
目录功能........................... 426
10.4.13 文件流操作....................... 427
10.5 program_options ........................428
10.5.1 概述..................................... 429
10.5.2 选项值................................. 431
10.5.3 选项描述器......................... 432
10.5.4 选项描述器的用法............. 433
10.5.5 分析器................................. 435
10.5.6 存储器................................. 436
10.5.7 使用位置选项值................. 437
10.5.8 分析环境变量..................... 439
10.5.9 分组选项信息..................... 440
10.5.10 高级用法........................... 442
10.6 总结...........................................445
第11 章函数与回调................................447
11.1 ref ...............................................447
11.1.1 类摘要................................. 448
11.1.2 基本用法............................. 449
11.1.3 工厂函数............................. 450
11.1.4 操作包装............................. 450
11.1.5 综合应用............................. 451
11.1.6 对比C++11 标准................ 452
11.2 bind ............................................453
11.2.1 工作原理............................. 454
11.2.2 绑定普通函数..................... 455
11.2.3 绑定成员函数..................... 456
11.2.4 绑定成员变量..................... 458
11.2.5 绑定函数对象..................... 458
11.2.6 使用ref 库........................... 459
11.2.7 对比C++11 标准................ 460
11.2.8 高级议题............................. 460
11.3 function ......................................463
11.3.1 类摘要................................. 464
11.3.2 function 的声明................... 465
11.3.3 操作函数............................. 465
11.3.4 比较操作............................. 466
11.3.5 用法..................................... 466
11.3.6 使用ref 库........................... 468
11.3.7 用于回调............................. 469
11.3.8 对比C++11 的auto ............ 471
11.3.9 对比std::function ................ 472
11.4 signals2 ......................................472
11.4.1 类摘要................................. 473
11.4.2 操作函数............................. 474
11.4.3 插槽的连接与调用.............. 475
11.4.4 信号的返回值..................... 477
11.4.5 合并器................................. 477
11.4.6 管理信号的连接................. 479
11.4.7 更灵活的管理信号连接..... 480
11.4.8 自动连接管理..................... 483
11.4.9 应用于观察者模式............. 485
11.4.10 高级议题........................... 488
11.5 总结............................................492
第12 章并发编程....................................495
12.1 atomic.........................................495
12.1.1 类摘要................................. 496
12.1.2 基本用法............................. 498
12.1.3 整数atomic 的用法............ 499
12.1.4 并发顺序一致性................. 500
12.2 thread .........................................503
12.2.1 mutex................................... 503
12.2.2 lock_guard ........................... 506
12.2.3 unique_lock ......................... 507
12.2.4 lock 适配器......................... 510
12.2.5 lockable 概念检查类........... 512
12.2.6 lock 函数............................. 512
12.2.7 thread................................... 513
12.2.8 使用线程............................. 515
12.2.9 中断线程............................. 518
12.2.10 thread_group...................... 521
12.2.11 call_once............................ 522
12.2.12 条件变量........................... 523
12.2.13 shared_mutex..................... 527
12.2.14 future ................................. 529
12.2.15 shared_future ..................... 533
12.2.16 高级议题........................... 534
12.3 asio.............................................536
12.3.1 概述..................................... 537
12.3.2 UNIX 信号.......................... 543
12.3.3 定时器................................. 549
12.3.4 网络通信概述..................... 554
12.3.5 同步TCP 通信.................... 560
12.3.6 异步TCP 通信.................... 562
12.3.7 解析网络地址..................... 568
12.3.8 协程..................................... 570
12.3.9 其他议题............................. 573
12.4 总结...........................................577
第13 章 Boost 组件速览.........................579
13.1 算法...........................................579
13.2 字符串和文本处理....................580
13.3 容器与数据结构........................580
13.4 迭代器.......................................581
13.5 函数对象与高级编程................582
13.6 泛型编程...................................583
13.7 模板元编程................................585
13.8 预处理元编程............................585
13.9 并发编程...................................586
13.10 数学与数字..............................587
13.11 TR1 实现..................................588
13.12 输入输出.................................588
13.13 C++11 特性模拟实现..............588
13.14 杂项.........................................589
13.15 总结.........................................591
第14 章 Boost 与设计模式.....................593
14.1 创建型模式...............................594
14.2 结构型模式...............................595
14.3 行为模式...................................598
14.4 其他模式...................................601
14.5 总结...........................................603
第15 章结束语........................................605
15.1 未臻完美的Boost .....................605
15.2 让Boost 工作得更好................606
15.3 工夫在诗外...............................608
15.4 临别赠言...................................610
附录A 推荐书目.......................................611
附录B C++标准简述................................613
附录C C++关键字浅谈...........................617
· · · · · · (
收起)