Boost程序库完全开发指南——深入C++“准”标准库(第3版)

内容简介  · · · · · ·

Boost
是一个功能强大、构造精巧、跨平台、开源又完全免费的C++程序库,有着“C++‘准’标准库”的美誉。

Boost 由C++标准委员会部分成员所办之Boost
社区开发并维护,使用了过多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并作编程、函数式编程、泛型编程、设计模式实现等重重世界,极大地抬高了C++的成效以及表现力,能够使C++软件开发更加赤裸裸、优雅、灵活和快。

《Boost程序库完全开发指南——深入C++“准”标准库(第3版本)》基于2014 年11
月发布之Boost 1.57 版,介绍了内的备129 独仓库,并且结合C++11/14
标准详细、深入地执教了其中数十单仓库,同时落实了若干特别具有实用价值的工具类和函数,可辅助读者很快地解、掌握Boost
的用法并使叫实际的开销工作。

《Boost程序库完全开发指南——深入C++“准”标准库(第3版)》内容丰富、结构严谨、详略得当、讲解透彻,带领读者了解了C++的最新前沿技术,相信会是各级位C++程序员的必需工具书。

作者简介  · · · · · ·

罗剑锋(网名Chrono)1996年就读于东北财经大学,1997年始于接触C/C++,1998年到场计算机软件正式技术资格和程度考试,获高级程序员资质。2003年毕业被北京理工大学,获计算机专业硕士学位。主要研究方向也C/C++、设计模式、高性能网络服务器开发。业余爱好是阅读、欣赏音乐与旅游。

目录  · · · · · ·

第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

 

 

 

 

推荐序
多年来一模一样年我电话面试了数十员C++应聘者,惯用的暖场问题是“工作被利用过STL的如何组件?用了Boost的如何组件?”得到的答案大多集中在vector、map和shared_ptr。如果对方是在校学员,我一般会咨询问vector或map的里贯彻、各种操作的复杂度,以及迭代器失效的或是场景。如果是发出更的程序员,我还见面追问shared_ptr的线程安全性、循环引用的结局及如何避免、weak_ptr的来意相当于。如果这些还回得没错,进一步还可咨询怎么促成线程安全之援计数,如何定制删除动作等。这些题材让自家能够很快地识别对方的C++水平。
我用在面试时咨询到Boost,是以中间的成千上万组件确实好用于编写而保障的活代码。Boost包含近百独程序库,其中不乏有工程实用价值的佳品。每个人口味与技能背景不等同,对Boost的挑三拣四也非同等。就自身之民用经历而言,首先可以下绝对化无害的堆栈,例如noncopyable、scoped_ptr、static_assert等,这些库的上学及动用都比较简单,容易下手。其次,有些功能协调实现起来连无紧,正好Boost里供了成的代码,那就是不妨一就此,比如date_time和circular_buffer等。然后,在初类型面临,对于消息传递和资源管理好考虑使用更为现代底点子,例如用function/bind在少数情况下代虚函数作为仓库底回调接口、借助shared_ptr实现线程安全之靶子回调等。这第二吧会影响整程序的计划思路以及作风,需要通盘考虑,如果没错运用智能指针,在现世C++程序里一般不需出现delete语句。最后,对一些性能不好好之堆栈保持警惕,比如lexical_cast。总之,在项目组成员人人都能够明了并行使的根基及,适当引入现成的Boost组件,以减小重复劳动,提高生产力。
Boost是一个宝藏,其中既出好一直将来为此底代码,也发生值得借鉴之筹划思路。试举无异于章:正则表达式库regex对线程安全的拍卖。
最初的RegEx类不是线程安全之,它将“正则表达式”和“匹配动作”放到了一个近似中。由于起可转移多少,RegEx的对象不能够跳线程使用。如今之RegEx明确所在分割了不可变(immutable)与可变(mutable)的数额,前者可高枕无忧地超过线程共享,后者则充分。比如正则表达式本身(basic_regex)与平糟匹配的结果(match_results)是不可变的;而配合动作本身(match_regex)涉及状态更新,是可变的,于是用而重入的函数将其卷入起来,不深受这些多少外泄给别的线程。正是出于做了这么合理之分,RegEx在常规使用时便无需加锁。
Donald Knuth 在“Coders at
Work”一书里表达了这般一个视角:如果程序员的劳作就是摆弄参数去调用现成的库房,而无亮堂这些库是如何落实之,那么就卖工作就是从不啥乐趣可言。换句话说,固然我们强调工作备受并非再次发明轮子,但是作为一个及格的程序员,应该拥有自制轮子的力。非非能够也,是匪呢乎。
C/C++语言的一律十分特色是那标准库可以用语言本身实现。C标准库的strlen、strcpy、strcmp系列函数是教学与练习的好问题,C++标准库的complex、string、vector则是接近、资源管理、模板编程的绝佳示范。在深入摸底STL的贯彻后,运用STL自然手顶擒来,并能够自行避免有些荒谬与无效的用法。
对Boost也是这么,为了清除使用时的多疑,为了用得再顺手,有时我们需要适当了解其中间贯彻,甚至编写简化版用作对比验证。但是出于Boost代码用到了普通应用程序开发中莫常见的高等语法和技术,并且为超越多单平台跟编译器而恢宏利用了预处理宏,阅读
Boost源码并无轻松惬意,需要下一番素养。另一方面,如果沉迷于这些有趣的根细节而忘掉了原先要化解什么问题,恐怕就舍本逐末了。
Boost中之不得了多库是按泛型编程的范式来计划的,对于熟悉面向对象编程的人头而言,或许面临一个思路的转变。比如,你得熟悉泛型编程的那套术语,如concept、model、refinement,才容易读懂Boost.Threads文档中有关各种锁之叙说。我想,对于熟悉STL设计意见的总人口而言,这不是什么特别题材。
当好几领域,Boost不是唯一的选,也未自然是极致好的挑三拣四。比如,要变公式化的源代码,我会首选用脚本语言写一小段代码生成程序,而无用Boost.Preprocessor;要以C++程序中放到领域特定语言,我会首选用Lua或任何语言解释器,而不用Boost.Proto;要为此C++程序解析及下文无关文法,我会首选用ANTLR来定义词法与语法规则并生成解析器(parser),而未用Boost.Spirit。总之,使用Boost时心情要柔和,别较强劲去改造C++语言。把它促进加强生产力的那有些职能充分发挥出来,让项目从中受益才是重中之重。
一经上Boost,除了看其官方网站的文档、示例与源码之外,最好会出平等据比较全面的汉语写于手头随时看。对于生英文的开发者,这更加可幸之交。您手上就本《Boost
程序库完全开发指南》是十分好的使用指南与参考手册。作者由浅入雅地介绍了Boost的大部常用内容,能叫读者很快了解Boost,并从中找到好欲之一对。拿到马上本书稿之后,我生略有细地阅读了平等举,总体来拘禁,作者水平非常高,也相当务实,对C++和Boost的知道与利用好成功,我自即本开学到了重重新知识。为这个,我愿意为梦想学Boost程序库的开发者推荐这本靠谱的题。
事项“功不唐捐”,作为同样号称现代C++程序员,在Boost上投入的生命力定能获回报。

陈硕 
《代码大全》译者之一 
中华香港

第3版前言
针对第2本子的更动
本版的目标是奔C++11/14正规靠拢。
由于这些变迁,第2版本于保持原书风格的而召开了适龄调整,删去了部分浅显的有些,并因最新的C++11与Boost程序库全面更新,较第1版本略长吃水,但还要因为入门为主,不过大多介绍库的贯彻细节。由于C++11专业发众多初的语言特征和仓库,包含了部分Boost库原有的功能,故作者弱化了有些同C++11言语特色还的堆栈,对于库组件则根本讲解符合C++11规范的功力。
第2版本使用了4只出条件,处理不同系统内的兼容问题令人头疼,特别是设“照顾”不支持C++11标准的编译器而不克使初特点,编写代码有种植“捆住了动作”的发。故本次只以Linux操作系统,编译器也运用时的GCC4.8,可以就同进C++的流行发展。
本书第3本的重中之重变更列举如下。
第0段 : 重新组织了组织,增加GitHub源码资源;
第1回 : 新加构建工具b2的牵线,删除了STLPort和Windows相关内容;
第3章 : 新增make_unique()/intrusive_ptr等多初情节,
删除了auto_ptr相关的阐述;
第4章 : 新增ignore_unused、explicit_operator_bool等内容,
更新optional和assign库,删除了typeof;
第5章 : 新增string_ref库,更新了lexical_cast;
第6章 : 新增lightweight test,调整了assert;
第8章 : 新增clamp、hex等算法;
第9章 : 新增math.constants和ratio库,调整了rational;
第10章 : 新增chrono库,删除了io_state_savers;
第11章节 : 增加对C++11里lambda表达式的论述,删除了result_of;
第12节 : 新增atomic库,完全还写了thread和asio的牵线,
追加了汪洋新内容,如UNIX信号、协程等;
第13节 : 更新到Boost1.57本,删除了本13章boost.python;
第14章节 : 新增了一个目标池模式;
附录 : 完善针对C++11/14/17规范的牵线,删除了STL简介。
致谢
前少本的谢谢已经够用多矣,但自身或要感谢但尊敬可爱的读者,希望本书还是您做事负不可或缺的伴侣。

罗剑锋
2015年1月5日于北京
第2版前言
本书第1本子面世至今忽忽然不觉就有数年富,其间多蒙读者厚爱,褒奖有加,不胜感激,在是聊写几文字,以志心性。
闲聊碎语C++
当下简单年里对于C++社区来说最重点的风波其实是C++11正规的揭晓了:历经十余年之磨炼,崭新的C++终于扬刀出鞘,诸多新语言特征和库房底入使得C++旧貌换新颜,从此程序员手里的即时管宝刀更是增添了无穷的威力,上天入地屠龙伏虎,不在话下。
不久前开源界的同一码新闻也不得不提一下:著名的C/C++编译器GCC于2012年8月到位了打C实现到C++实现的转移。虽然就桩事比较未达标C++11宣布,但足够可以从一个侧面证实C++的实力已获取了开源界的惊人认同,今后并未呀是C++做不下的了。
作为C++标准的后备,随着C++11的业内披露,Boost程序库现在登了一个新的历史时:一方面根据新专业不断完善自身,另一方面则秉承传统延续开拓C++11休涉嫌的天地。这点儿端可以由Boost历次巨细靡遗的创新记录受扣下——不断修正既来库中不符合标准的地方,同时再度严谨地引入新的组件,“小步快蒸发”地朝着于“康庄大道”。
出于Boost程序库正日益为C++11标准靠拢,曾经的“准标准库”美誉已经休绝适宜了,它再也如是一个比C++标准库更加“兼容”、更加“标准”的“超级标准库”——使用Boost可以完全铲除C++11与C++98之间的反差,稍微小夸张地游说:学习Boost就一定给上学现代C++,使用现代C++必然避不起Boost。
国内外的森公司还已拿Boost作为自己源码资产的同局部,在这些强质量的软件组件

 

 

 

 

 

 

作为一个经常要用一些 C++
的程序员,我常常自嘲为斯德哥尔摩综合症患者,用 Python
写着懒散的代码时,会怀念以前编写 C++ 代码的那种让虐感。但当真正使写有
C++ 代码的当儿,又见面想 Python
带为自己之自由自在,这或许就是所谓的由奢入俭难矣。幸好有
Boost,有时候它还于自身道其实 C++ 也可形容得如 Python
般雅致。大概是因 Boost
的组委们直接以来的赛要求,好库,好文档,所以长期都是读书在线文档作为学习之路。后来为时有发生国人翻译了一致遵照
Boost 的开,书非常过硬,但相应的 Boost
的版就于过时了,而且语言转换过程遭到吗生不可避免的信息没有,令人心潮难平。这几乎年,alai
等丁自发组织起,翻译了 Boost
的通文档和部分连锁书籍,而且本着版本的跟进也是较这的,是不足多得之好资料。尽管发生这么方便的资源,我还是于期待有相同我国人写的,Boost
相关的写,我深信国人对咱们利用的 C++
风格与水准发生还好之明白,能够写有重新称我们实事求是需求的开。所以后来即才来这按照《Boost程序库完全开发指南:深入C++”准”标准库》(以下简称《Boost
指南》)。
 
尽管如此自己希望同我国人写的 Boost
相关的写,但是当自己看到就本开的目时,我不由地鄙视起来:太多东西了,像流水账,甚至可能是直抄袭官方文档。

当写到手后,我发觉它们过了自之愿意,作者的苦心不说,至少抄袭了是匪存在的。第
0、1 两章把读者引入 Boost
的初新世界,讲述了本书的核心结构和阅读指南,然后是 Boost
的装与编译,给了初手一久发展的楼梯。本书可以说凡是详略得当,作为同作一定也手册+介绍的开,做到就同触及不太容易。编排由浅入深,而而曲径通幽,比如为“时间与日期”作为
hello boost 之例,与当前市场上之 Boost 大出差(通常是坐 shared_ptr
为开),因为“时间及日期”是大家随时碰的定义,接受起来容易多,让丁感觉到
Boost 真的生因此,解决实际问题,这样读者对 Boost
的志趣就于唤起了四起,再为生诵读,也非那么边怕艰难了。其实按照我的考虑,我觉着接下便开口一下字符串和各种容器,比如
tuple、unordered、bimap、circular_buffer
之类的,应该更好有的;可惜这仍开还是对接下去这便起出口内存管理,介绍
shared_ptr 了,不能够免俗啊。

当时按照开之其它一个特色就是是例证都是作者专心构造之,尽外露作者给足够了思考做随好写。比如讲
date_time
库的那么同样章,构造了一个信用卡的免息期的计算例子,例在身边,感受独特,我当下读到之事例觉得作者真的可到头来得及独树一帜了。虽然如此,但仍要指出一下缘作者或无绝好参考他人的片例子(太怕深受人说抄袭而刻意避嫌?),也来一对自家认为不顶好之例证,比如讲
operators 时,那个 class
point,居然支持大小比较和加减操作,多少出点算概念没理清。如果实在要因此此事例,我当说不定让
class vector3d(三维矢量)更好有。

说到底,讲一下顿时仍开我以为比较不欣赏的地方。在我看来,既然读者都早就开学习、使用
Boost 了,想必基础比较好、自我学习能力较强,《Boost
指南》仍然定位在介绍和手册这同样层次,我认为多少吃丁觉得就本开写得啰嗦、写得无敷深入。虽然全书都是作者自己之经历与上成果,例子吗是周密构建,但读来仍未会见产生高于官文档的觉得。关于
Boost 的题,我又期望的或许是哪些为 Boost
来化解一些藏的问题,向读者展示 Boost 的强大和实用的《Boost
Cookbook》。从全书来拘禁,作者 C++
经验相当丰富,这本开了没显示出作者的实际水平,很盼望作者能够加加油,换换思路,带吃咱们一样依照《Boost
Cookbook》。

末尾两段,Boost 和设计模式、结束语,是必备之画。前者针对 GoF 的 23
独设计模式和新生总结的 3 个设计模式与 Boost 结合起来,点破 Boost
中的什么样库使用了谁设计模式,可以说凡是揭开了 Boost
库精巧灵活的谜,也让设计模式的学人、爱好者有一个只是亲眼目睹的模式之应用与贯彻之样板。这是当其余书被从来不见的。而以结束语中,作者直言
C++ 和 Boost
仍然发生无数不足,但咱吧不必拘泥于此,我们如果发生乐观的见识,用好工具解决好题材,编程,功夫在诗外。作者最后说到平等句子话,因为我吧已说罢类似之发言,使我顿生戚戚,所以借来作为自己之书评的了断吧:……生活备受未单纯发生
C++、代码和编程,还有再多的物值得我们去体会,朋友、亲人、爱人还值得花时间以及他们当共。走来办公室,离开计算机,去近大自然,享受美餐,散散步,打打球……拥有美好的生才能够创立有圆满的程序。

 

 

 

 

 

 

 

 

 

 

入门还行,如果您如做应用级开发,还是看文档吧.
里边的物用法太简单了,好多吧还是大概介绍下,复杂的采用下从无足够用底.
还是得看文档和源码,比如asio这等同章….被坑的免浅…
计时器用法介绍最简单了,谁知道到每次计完数还要再安装过数值。
io_service介绍最简单了,work各种从未介绍,post各种没介绍…都蛮有因此底家伙啊。
无奈之下学习了了boost官方文档,和源代码,虽然难度,却十分有补益。
入门还是引进的….

即时题吧,看看,对boost大概有只了解就行了。。。要真的地当类型受到使用boost时莫建议参考该书。该书中稍微地方说得不懂得不白死易吃人口误会,有的便了弄错了,比如pool一回;有的该说的从未有过说看了邪无能为力对利用。而且,书的节结构也无太好(我想能够是侯捷翻的那么按照《C++标准程序库—自修教程以及参考手册》那样,能为自身迅速开,看就题时老是想搜寻什么虽找不交什么,非要扣押了一那个节才知。。。)最要的是,本书只是介绍性的,请将……

只拘留了写及之thread,date_time等有数的几个章节,体验如下:
优点:

  1. 目很咸,罗列出来了boost中实现的几乎有的跨平台的零部件;
  2. 乍碰boost时,可以大大缩短安装,编译,编写示例代码的时间.
    缺点:
    1.浏览目录的次数比较浏览内容之次数还要多,一般是基于目录再跨头去押boost的在线文档.书中情节深度不够;可能和本本的稳有关,毕竟一旦要求发出深度,一个零件就够用出同本书了.
    2.浏览着觅不至重点.这么巨大之库房,如果要求面面俱到是纯属免可能的.总要发生只尊重点.比如shared_ptr中之大部函数的计划初衷是替原始指针,顺着这漫长总长去熟悉shared_ptr的源代码自然会非常容易.再比如shared_ptr中会列出指针类型的Common
    Requirements,我觉着是事物在实际上使用时很重要.应该重点,花有篇幅说明.

 

 入门还行,如果你要举行应用级开发,还是看文档吧.
里的事物用法太简单了,好多吗还是横介绍下,复杂的应用下向不足够用的.
或得看文档和源码,比如asio这同一章….被坑的莫浅…
计时器用法介绍最简单了,谁知道到每次计完数还要再安装过数值。
io_service介绍最简单了,work各种从未介绍,post各种没介绍…都非常有因此底家伙啊。
无奈之下学习了了boost官方文档,和源代码,虽然难度,却坏有益处。
入门还是引进的….

 

 

马上书吧,看看,对boost大概有个了解就推行了。。。要真正地在列蒙以boost时无建议参考该书。该书被略地方说得无知晓不白死容易被人口误会,有的即使全盘将错了,比如pool一节;有的该说的远非说看了吗无从对用。而且,书的章节结构也非绝好(我望能够是侯捷翻的那么本《C++标准程序库—自修教程以及参考手册》那样,能于自家飞开,看就题常常总是惦记搜寻什么就招来不交啊,非要是拘留罢一那个节才知。。。)最重大之是,本书只是介绍性的,请将之视作中文翻译文档看待,不要想看罢后即使能够针对boost数一数二可知一心知道boost神马的。总之,我不推荐这开。。。重要之时段看文档吧。。。

 

用作一如既往位c++开发人员,在以到本书之前听名字我为像大家一如既往感觉到很Nx,可是从得到了,花了一个钟头翻了平整个,心里有种失落的发,就将她丢在了丢书堆里了。自己设置个boost,目录下之赞助文档比它强多了。本人觉得,用上boost的程序员应该说c++应该基础科学,基础不好的绝不过早的应用boost,本书没有上升至高层来俯瞰boost的架构或性能方面的总结,尽是中文版的声援文档,有啊用吧。说实话,在举行项目时,需要哪个部件时便会见为此之,哪用特别这么的抱本书看呀,还好,是图书馆的书写,没破费,善哉善哉……

单看了书上的thread,date_time等有数的几乎单章,体验如下:
优点:

  1. 目录很咸,罗列出来了boost中贯彻之几拥有的跨平台的机件;
  2. 新碰boost时,可以大大缩短安装,编译,编写示例代码的时间.
    缺点:
    1.浏览目录的次数比较浏览内容的次数还要多,一般是因目录再跨头去看boost的在线文档.书中情节深度不够;可能同书本的一贯有关,毕竟如果要求来深,一个组件就足够出一致本书了.
    2.浏览着找找不顶重点.这么高大之堆栈,如果要求面面俱到是绝对不容许的.总要起个注重点.比如shared_ptr中之多数函数的规划初衷是代表原始指针,顺着这条总长去熟悉shared_ptr的源代码自然会特别容易.再遵照shared_ptr中会列出指针类型的Common
    Requirements,我以为这事物在骨子里利用时好重要.应该要,花片篇幅说明.

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website