Boost程序库探秘:深度解析C++准标准库

更新时间:2023-06-26 18:01

《Boost程序库探秘:深度解析C++准标准库》是2012年清华大学出版社出版的图书,作者是罗剑锋。

内容简介

Boost程序库由C++标准委员会部分成员所设立的Boost社区开发并维护,它功能强大、构造精巧、跨平台、开源并且完全免费,被称为“C++‘准’标准库”,已被广泛应用在实际软件开发中。

C++的最新标准(C++11)已经正式公布,而早在这之前,Boost就已经使用库的形式实现了大部分新功能——而且是完全基于C++98标准实现的,内容涵盖智能指针、文本处理、并发、模板元等许多领域,其范围之广内涵之深甚至要超过C++11标准,极大地增强了C++的功能和表现力。

本书基于Boost1.47版,深入探讨了其中的许多重要组件,包括迭代器、函数对象、容器、流处理、序列化以及C++语言中最复杂最具威力的模板元编程,并专辟一章详细阐述Boost的开发实例,具有较强的实用性,可帮助读者更好更快地理解掌握Boost的高级用法。

全书内容丰富、组织得当、概念清晰、讲解细致,是广大C++程序员和爱好者的必备好书。

目录

目录

第0章 导读 1

0.1 关于本书 1

0.2 读者对象 2

0.3 本书的风格 3

0.4 本书的开发环境 3

0.5 本书的结构 4

0.6 如何阅读本书 5

第1章 模板元编程(Ⅰ) 7

1.1 模板元编程概述 7

1.1.1 元数据 8

1.1.2 元函数 9

1.1.3 元函数转发 10

1.1.4 方便的工具 11

1.1.5 应用示例 12

1.2 type_traits 14

1.2.1 概述 14

1.2.2 元数据类别(Ⅰ) 15

1.2.3 元数据类别(Ⅱ) 17

1.2.4 元数据属性 18

1.2.5 元数据之间的关系 20

1.2.6 元数据转换 21

1.2.7 解析函数元数据 25

1.2.8 实现原理 26

1.2.9 应用示例 28

1.3 总结 29

第2章 实用工具 31

2.1 compressed_pair 31

2.1.1 什么是空类 31

2.1.2 类摘要 33

2.1.3 构造与赋值 34

2.1.4 用法 35

2.1.5 实现原理 36

2.1.6 功能扩展 37

2.2 checked_delete 40

2.2.1 函数的用法 41

2.2.2 函数对象的用法 42

2.2.3 带检查的删除 44

2.2.4 实现原理 45

2.2.5 使用建议 47

2.3 addressof 47

2.3.1 用法 47

2.3.2 实现原理 49

2.3.3 使用建议 49

2.4 value_initialized 50

2.4.1 变量的初始化 50

2.4.2 initialized 51

2.4.3 用法 52

2.4.4 value_initialized 52

2.4.5 更方便的用法 53

2.5 base_from_member 54

2.5.1 类摘要 54

2.5.2 用法 55

2.5.3 进一步的用法 57

2.6 conversion 59

2.6.1 标准转型操作符 59

2.6.2 多态对象的转型 60

2.6.3 polymorphic_downcast 61

2.6.4 polymorphic_cast 62

2.6.5 使用模板元编程实现转型 63

2.7 numeric/conversion 66

2.8 pointer 67

2.8.1 pointee 67

2.8.2 indirect_reference 69

2.8.3 pointer_to_other 69

2.8.4 compare_pointees 70

2.9 scope_exit 72

2.9.1 用法 72

2.9.2 应用示例 73

2.9.3 实现原理 74

2.9.4 注意事项 75

2.10 总结 76

第3章 迭代器 79

3.1 迭代器概述 79

3.1.1 迭代器模式 79

3.1.2 标准迭代器 80

3.1.3 新式迭代器 81

3.1.4 标准迭代器工具 83

3.1.5 迭代器与算法 84

3.2 next_prior 84

3.2.1 函数声明 85

3.2.2 用法 85

3.3 iterator_traits 87

3.3.1 标准迭代器特征类 87

3.3.2 类摘要 88

3.3.3 用法 89

3.4 iterator_facade 89

3.4.1 迭代器的核心操作 90

3.4.2 类摘要 90

3.4.3 用法 92

3.5 iterator_adaptor 96

3.5.1 类摘要 96

3.5.2 用法 98

3.6 迭代器工具 99

3.6.1 共享容器迭代器 99

3.6.2 发生器迭代器 102

3.6.3 逆向迭代器 104

3.6.4 间接迭代器 105

3.6.5 计数迭代器 107

3.6.6 函数输入迭代器 110

3.6.7 函数输出迭代器 113

3.6.8 过滤迭代器 115

3.6.9 转换迭代器 118

3.6.10 索引迭代器 119

3.6.11 组合迭代器 121

3.7 总结 124

第4章 函数对象 127

4.1 hash 127

4.1.1 类摘要 128

4.1.2 用法 129

4.1.3 实现原理 130

4.1.4 扩展hash 131

4.2 mem_fn 134

4.2.1 工作原理 134

4.2.2 用法 134

4.2.3 其他议题 136

4.3 factory 137

4.3.1 类摘要 138

4.3.2 用法 138

4.3.3 value_factory 141

4.3.4 使用typeof库 141

4.4 forward 142

4.4.1 类摘要 142

4.4.2 用法 143

4.5 总结 145

第5章 指针容器 147

5.1 概述 147

5.1.1 入门示例 148

5.1.2 指针容器的优缺点 151

5.1.3 可克隆概念 152

5.1.4 克隆分配器 153

5.1.5 指针容器的分类 154

5.2 指针容器的共通能力 157

5.2.1 模板参数 157

5.2.2 构造与赋值

5.2.3 访问元素 160

5.2.4 其他能力 162

5.3 序列指针容器适配器 163

5.3.1 配置元函数 163

5.3.2 类摘要 164

5.3.3 接口解说 166

5.3.4 代码示例 166

5.4 ptr_vector 167

5.4.1 类摘要 168

5.4.2 用法 169

5.5 ptr_deque 170

5.5.1 类摘要 170

5.5.2 用法 171

5.6 ptr_list 172

5.6.1 类摘要 172

5.6.2 用法 173

5.7 ptr_array 174

5.7.1 类摘要 174

5.7.2 用法 175

5.8 ptr_circular_buffer 177

5.8.1 类摘要 177

5.8.2 用法 178

5.9 空指针处理 179

5.9.1 禁用空指针 179

5.9.2 允许空指针 179

5.9.3 使用空指针 181

5.9.4 空对象模式 182

5.10 关联指针容器的共通能力 184

5.10.1 类摘要 184

5.10.2 接口解说 185

5.11 集合指针容器适配器 186

5.11.1 配置元函数 186

5.11.2 ptr_set_adapter 187

5.11.3 ptr_multiset_adapter 188

5.12 ptr_set和ptr_multiset 189

5.12.1 类摘要 189

5.12.2 用法 190

5.13 ptr_unordered_set和ptr_

unordered_multiset 191

5.13.1 类摘要 191

5.13.2 用法 193

5.14 映射指针容器适配器 194

5.14.1 配置元函数 194

5.14.2 ptr_map_adapter 195

5.14.3 ptr_multimap_adapter 197

5.15 ptr_map和ptr_multimap 198

5.15.1 类摘要 198

5.15.2 用法 199

5.16 ptr_unordered_map和ptr_

unordered_multimap 200

5.16.1 类摘要 200

5.16.2 用法 202

5.17 使用assign库 203

5.17.1 向容器添加元素 203

5.17.2 初始化容器元素 204

5.18 使用算法 205

5.18.1 标准算法 205

5.18.2 序列指针容器的算法 209

5.18.3 关联指针容器的算法 212

5.19 其他议题 214

5.19.1 异常 214

5.19.2 间接函数对象 215

5.19.3 插入迭代器 216

5.19.4 使用视图分配器 217

5.19.5 可克隆性的再讨论 218

5.19.6 序列化 219

5.20 总结 219

第6章 侵入式容器 221

6.1 概述 221

6.1.1 手工实现链表 222

6.1.2 intrusive库介绍 223

6.2 入门示例 224

6.2.1 使用基类挂钩 224

6.2.2 使用成员挂钩 225

6.3 基本概念 227

6.3.1 节点 228

6.3.2 节点特征 228

6.3.3 节点算法 229

6.3.4 值特征 230

6.3.5 挂钩 231

6.3.6 选项 232

6.3.7 处置器 234

6.3.8 克隆 234

6.4 链表 235

6.4.1 节点和算法 235

6.4.2 基类挂钩 236

6.4.3 成员挂钩 237

6.4.4 list类摘要 238

6.4.5 list的基本用法 240

6.4.6 list的特有用法 242

6.5 有序集合 246

6.5.1 节点和算法 246

6.5.2 基类挂钩 247

6.5.3 成员挂钩 248

6.5.4 set类摘要 248

6.5.5 set的基本用法 250

6.5.6 set的特有用法 251

6.5.7 multiset类摘要 253

6.5.8 multiset的用法 254

6.6 无序集合 254

6.6.1 节点和算法 255

6.6.2 基类挂钩 255

6.6.3 成员挂钩 256

6.6.4 unordered_set类摘要 257

6.6.5 unordered_set的基本用法 258

6.6.6 unordered_set的特有用法 260

6.6.7 unordered_multiset类摘要 263

6.6.8 unordered_multiset的用法 263

6.7 其他议题 264

6.7.1 同时使用多个挂钩 264

6.7.2 链接模式 266

6.7.3 万能挂钩 266

6.8 总结 267

第7章 多索引容器 269

7.1 概述 269

7.2 入门示例 270

7.2.1 简单的例子 270

7.2.2 复杂的例子 271

7.2.3 更复杂的例子 273

7.3 基本概念 276

7.3.1 索引 276

7.3.2 索引说明 277

7.3.3 键提取器 278

7.3.4 索引说明列表 279

7.3.5 索引标签 279

7.3.6 多索引容器 280

7.4 键提取器 281

7.4.1 定义 281

7.4.2 identity 282

7.4.3 member 283

7.4.4 const_mem_fun 284

7.4.5 mem_fun 286

7.4.6 global_fun 287

7.4.7 自定义键提取器 287

7.5 序列索引 288

7.5.1 索引说明 288

7.5.2 类摘要 289

7.5.3 用法 290

7.6 随机访问索引 292

7.6.1 索引说明 292

7.6.2 类摘要 292

7.6.3 用法 293

7.7 有序索引 294

7.7.1 索引说明 295

7.7.2 类摘要 295

7.7.3 基本用法 297

7.7.4 高级用法 298

7.8 散列索引 301

7.8.1 索引说明 302

7.8.2 类摘要 302

7.8.3 用法 303

7.9 修改元素 305

7.9.1 替换元素 305

7.9.2 修改元素 306

7.9.3 修改键 309

7.10 多索引容器 310

7.10.1 类摘要 310

7.10.2 用法 311

7.11 组合索引键 314

7.11.1 类摘要 314

7.11.2 用法 315

7.11.3 辅助工具 316

7.12 总结 318

第8章 流处理 319

8.1 概述 319

8.1.1 标准库的流处理 319

8.1.2 Boost的流处理 321

8.2 入门示例 322

8.2.1 示例1 322

8.2.2 示例2 324

8.3 设备的特征 325

8.3.1 设备的字符类型 325

8.3.2 设备的模式 326

8.3.3 设备的分类 328

8.4 设备 329

8.4.1 设备概述 329

8.4.2 数组设备 330

8.4.3 标准容器设备 332

8.4.4 文件设备 334

8.4.5 空设备 335

8.5 过滤器 336

8.5.1 过滤器概述 337

8.5.2 管道和设备链 337

8.5.3 计数过滤器 339

8.5.4 正则表达式过滤器(Ⅰ) 341

8.5.5 正则表达式过滤器(Ⅱ) 344

8.5.6 压缩过滤器 345

8.6 流 348

8.6.1 基本流 348

8.6.2 过滤流 349

8.7 流处理函数 352

8.8 定制设备 353

8.8.1 定制源设备 354

8.8.2 定制接收设备 356

8.9 定制过滤器 357

8.9.1 过滤器实现原理 357

8.9.2 aggregate_filter 358

8.9.3 basic_line_filter 360

8.9.4 手工打造过滤器 361

8.10 组合设备 365

8.10.1 combine 365

8.10.2 compose 366

8.10.3 tee 367

8.11 其他议题 369

8.12 总结 370

第9章 序列化 373

9.1 编译与使用 373

9.1.1 编译 373

9.1.2 使用 376

9.2 入门示例 376

9.2.1 示例1 376

9.2.2 示例2 378

9.2.3 示例3 379

9.3 基本概念 381

9.3.1 存档(archive) 381

9.3.2 可序列化 382

9.3.3 序列化和反序列化 383

9.4 存档 383

9.4.1 输出存档 383

9.4.2 输入存档 385

9.4.3 类继承体系 386

9.4.4 XML格式存档 387

9.4.5 异常 388

9.5 使用序列化 389

9.5.1 基本类型的序列化 389

9.5.2 数组的序列化 390

9.5.3 标准类型的序列化 392

9.5.4 标准容器的序列化 393

9.5.5 非标准容器的序列化 394

9.5.6 Boost类型的序列化 395

9.5.7 Boost容器的序列化 397

9.6 定制序列化 399

9.6.1 可序列化的要求 399

9.6.2 侵入式可序列化 402

9.6.3 非侵入式可序列化 403

9.6.4 Boost类型的可序列化 404

9.6.5 Boost容器的可序列化 407

9.7 高级定制序列化 410

9.7.1 派生类的序列化 410

9.7.2 序列化的版本 411

9.8 指针的序列化 413

9.8.1 指针可序列化的要求 413

9.8.2 原始指针的序列化 414

9.8.3 智能指针的序列化 414

9.8.4 派生类指针的序列化 415

9.8.5 指针容器的序列化 417

9.9 实用工具 417

9.9.1 BOOST_STRONG_

TYPEDEF 417

9.9.2 BOOST_STATIC_

WARNING 418

9.9.3 smart_cast 418

9.9.4 base64编解码 419

9.9.5 base16编解码 422

9.10 总结 424

第10章 泛型编程 427

10.1 enable_if 427

10.1.1 类摘要 428

10.1.2 应用于模板函数 429

10.1.3 应用于模板类 430

10.1.4 lazy_enable_if 431

10.2 call_traits 431

10.2.1 类摘要 432

10.2.2 用法 432

10.2.3 实现原理 434

10.3 concept_check 436

10.3.1 概述 436

10.3.2 基本概念检查 437

10.3.3 函数对象概念检查 438

10.3.4 标准迭代器概念检查 439

10.3.5 新式迭代器概念检查 440

10.3.6 容器概念检查 442

10.3.7 在函数声明中的概念

检查 444

10.3.8 概念原型类 445

10.4 function_types 446

10.4.1 属性标签 447

10.4.2 函数类型分类 448

10.4.3 函数类型分解 449

10.4.4 函数类型合成 451

10.4.5 其他议题 452

10.5 总结 452

第11章 模板元编程(Ⅱ) 455

11.1 mpl概述 455

11.2 mpl的整数类型 456

11.2.1 概述 456

11.2.2 整数类型 458

11.2.3 bool类型 459

11.2.4 基本运算 460

11.3 mpl的流程控制 464

11.3.1 if_和if_c 464

11.3.2 eval_if和eval_if_c 465

11.4 mpl的容器 467

11.4.1 概述 467

11.4.2 vector 468

11.4.3 string 469

11.4.4 map 471

11.4.5 相关元函数 472

11.5 mpl的迭代器 473

11.5.1 概述 473

11.5.2 相关元函数 474

11.6 mpl的算法 475

11.6.1 插入器 475

11.6.2 查询算法 476

11.6.3 变换算法 478

11.6.4 运行时算法 479

11.7 mpl的高级用法 481

11.7.1 高阶元数据 481

11.7.2 占位符 482

11.7.3 bind表达式 483

11.7.4 lambda表达式 484

11.7.5 算法的高级应用 485

11.8 mpl的调试 488

11.8.1 断言 488

11.8.2 打印输出 491

11.9 mpl实例研究 492

11.9.1 泛型编程版本 493

11.9.2 元编程第1版 495

11.9.3 元编程第2版 497

11.10 总结 499

第12章 开发实践 501

12.1 基本工具 501

12.1.1 标准整数 502

12.1.2 并发 503

12.1.3 日志 506

12.2 第一个TCP服务器 507

12.2.1 tcp_buffer 508

12.2.2 tcp_server 510

12.2.3 tcp_session 514

12.2.4 验证 519

12.2.5 使用回调函数 520

12.2.6 简单协议的实现 523

12.2.7 HTTP协议的实现 529

12.3 多线程工具 532

12.3.1 job_queue 532

12.3.2 worker 535

12.3.3 scheduler 539

12.3.4 safe_map 541

12.3.5 safe_singleton 546

12.4 第二个TCP服务器 547

12.4.1 消息结构定义 548

12.4.2 tcp_message 549

12.4.3 tcp_session 552

12.4.4 tcp_server 558

12.4.5 实现echo协议 560

12.4.6 实现聊天室 562

12.5 总结 571

第13章 Effective Boost 573

13.1 基本原则 573

13.2 内存管理 577

13.3 容器、迭代器和算法 578

13.4 其他 580

13.5 结束语 582

附录A 推荐书目 583

附录B Boost程序库组件索引 585

附录C 程序员的工具箱 597

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}