《Boost程序库探秘 深度解析C++准标准库 第2版》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:罗剑锋著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2014
  • ISBN:9787302342731
  • 页数:640 页
图书介绍:本书是《Boost程序库完全开发指南》的延续,在前作的基础上结合C++11标准和模板元编程深入讲解Boost中的许多高级组件,包括函数对象、指针容器、侵入式容器、多索引容器、流处理和序列化等内容,使读者能够透彻理解这些组件的工作原理和用法。

第0章 导读 1

0.1关于本书 1

0.2读者对象 2

0.3本书的风格 3

0.4左值与右值 3

0.5本书的开发环境 4

0.6本书的结构 5

0.7如何阅读本书 6

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

1.1模板元编程概述 9

1.1.1元数据 10

1.1.2元函数 11

1.1.3元函数转发 13

1.1.4方便的工具 14

1.1.5应用示例 15

1.2 type_traits 16

1.2.1概述 17

1.2.2元数据类别(Ⅰ) 18

1.2.3元数据类别(Ⅱ) 20

1.2.4元数据属性(Ⅰ) 21

1.2.5元数据属性(Ⅱ) 23

1.2.6元数据属性(Ⅲ) 24

1.2.7元数据关系 25

1.2.8元数据运算(Ⅰ) 26

1.2.9元数据运算(Ⅱ) 28

1.2.10解析函数元数据 30

1.2.11实现原理 31

1.2.12应用示例 33

1.3总结 36

第2章 实用工具 39

2.1 compressed_pair 39

2.1.1什么是空类 39

2.1.2类摘要 41

2.1.3构造与赋值 42

2.1.4用法 43

2.1.5实现原理 43

2.1.6功能扩展 45

2.2 checked_delete 49

2.2.1函数的用法 49

2.2.2函数对象的用法 50

2.2.3带检查的删除 52

2.2.4实现原理 54

2.2.5使用建议 55

2.3 addressof 56

2.3.1用法 56

2.3.2实现原理 58

2.3.3使用建议 58

2.4 value_initialized 58

2.4.1变量的初始化 59

2.4.2 initialized〈T〉 60

2.4.3用法 61

2.4.4更方便的用法 61

2.4.5使用建议 62

2.5 base _from_member 62

2.5.1类摘要 63

2.5.2用法 64

2.5.3进一步的用法 65

2.6 conversion 67

2.6.1标准转型操作符 68

2.6.2多态对象的转型 69

2.6.3 polymorphic_ downcast 70

2.6.4 polymorphic_ cast 71

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

2.7 numeric conversion 74

2.7.1 bounds 75

2.7.2 numeric_cas 78

2.8 pointer 79

2.8.1 get_pointer 79

2.8.2 pointer_ cast 80

2.8.3 pointee 81

2.8.4 indirect_reference 82

2.8.5 pointer_to_other 83

2.8.6 compare_pointees 84

2.8.7 pointer_traits 86

2.9 scope_exit 87

2.9.1用法 88

2.9.2应用示例 88

2.9.3实现原理 90

2.10总结 90

第3章 迭代器 93

3.1迭代器概述 93

3.1.1迭代器模式 93

3.1.2标准迭代器 94

3.1.3新式迭代器 95

3.1.4标准迭代器工具 97

3.1.5迭代器与算法 98

3.2 next_prior 99

3.2.1函数声明 99

3.2.2用法 100

3.2.3 C++11标准 101

3.3 iterator_traits 102

3.3.1标准迭代器特征类 102

3.3.2类摘要 103

3.3.3用法 104

3.4 iterator_facade 104

3.4.1迭代器的核心操作 105

3.4.2类摘要 105

3.4.3用法 107

3.5 iterator_adaptor 111

3.5.1类摘要 112

3.5.2用法 113

3.6迭代器工具 116

3.6.1共享容器迭代器 116

3.6.2发生器迭代器 118

3.6.3逆向迭代器 120

3.6.4间接迭代器 122

3.6.5计数迭代器 123

3.6.6函数输入迭代器 126

3.6.7函数输出迭代器 130

3.6.8过滤迭代器 132

3.6.9转换迭代器 134

3.6.10索引迭代器 136

3.6.11组合迭代器 138

3.7 range 141

3.7.1区间概念 141

3.7.2区间元函数 142

3.7.3区间操作函数 143

3.7.4区间算法 145

3.7.5区间算法的返回类型 145

3.7.6 iterator range 148

3.7.7区间工具 151

3.7.8区间适配器 154

3.7.9高级议题 157

3.8总结 158

第4章 函数对象 161

4.1 hash 161

4.1.1类摘要 162

4.1.2用法 163

4.1.3实现原理 164

4.1.4扩展hash 165

4.2 mem_fn 167

4.2.1工作原理 168

4.2.2用法 168

4.2.3其他议题 170

4.3 factory 171

4.3.1类摘要 171

4.3.2用法 172

4.3.3 value_ factory 174

4.3.4使用auto/decltype 175

4.4 forward 176

4.4.1类摘要 176

4.4.2用法 177

4.5总结 179

第5章 指针容器 181

5.1概述 181

5.1.1入门示例 182

5.1.2指针容器的优缺点 185

5.1.3可克隆概念 186

5.1.4克隆分配器 187

5.1.5指针容器的分类 188

5.2指针容器的共通能力 191

5.2.1模板参数 191

5.2.2构造与赋值 193

5.2.3访问元素 194

5.2.4其他能力 196

5.3序列指针容器适配器 197

5.3.1配置元函数 197

5.3.2类摘要 198

5.3.3接口解说 200

5.3.4代码示例 200

5.4 ptr_vector 201

5.4.1类摘要 202

5.4.2用法 203

5.5 ptr_deque 204

5.5.1类摘要 204

5.5.2用法 205

5.6 ptr_list 206

5.6.1类摘要 206

5.6.2用法 207

5.7 ptr_array 208

5.7.1类摘要 208

5.7.2用法 209

5.8 ptr_circular_buffer 211

5.8.1类摘要 211

5.8.2用法 212

5.9空指针处理 213

5.9.1禁用空指针 213

5.9.2允许空指针 213

5.9.3使用空指针 215

5.9.4空对象模式 216

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

5.10.1类摘要 218

5.10.2接口解说 219

5.11集合指针容器适配器 220

5.11.1配置元函数 220

5.11.2 ptr_set_adapter 221

5.11.3 ptr_multiset_adapter 222

5.12 ptr_set和ptr_multiset 223

5.12.1类摘要 223

5.12.2用法 224

5.13 ptr_unordered_set和ptr_unordered_multiset 225

5.13.1类摘要 225

5.13.2用法 227

5.14映射指针容器适配器 228

5.14.1配置元函数 228

5.14.2 ptr_map_adapter 229

5.14.3 ptr_multimap_ adapter 231

5.15 ptr_map和ptr_multimap 232

5.15.1类摘要 232

5.15.2用法 233

5.16 ptr unordered map和ptr_unordered_multimap 234

5.16.1类摘要 235

5.16.2用法 236

5.17使用assign库 237

5.17.1向容器添加元素 237

5.17.2初始化容器元素 238

5.18使用算法 239

5.18.1标准算法 239

5.18.2序列指针容器的算法 243

5.18.3关联指针容器的算法 246

5.19其他议题 248

5.19.1异常 248

5.19.2间接函数对象 249

5.19.3插入迭代器 251

5.19.4使用视图分配器 251

5.19.5可克隆性的再讨论 252

5.19.6序列化 253

5.20总结 253

第6章 侵入式容器 255

6.1概述 255

6.1.1手工实现链表 256

6.1.2 intrusive库介绍 257

6.2入门示例 258

6.2.1使用基类挂钩 258

6.2.2使用成员挂钩 259

6.3基本概念 261

6.3.1节点 262

6.3.2节点特征 262

6.3.3节点算法 263

6.3.4值特征 264

6.3.5挂钩 265

6.3.6选项 266

6.3.7处置器 268

6.3.8克隆 268

6.4链表 269

6.4.1节点和算法 269

6.4.2基类挂钩 270

6.4.3成员挂钩 271

6.4.4 list类摘要 272

6.4.5 list的基本用法 274

6.4.6 list的特有用法 276

6.5有序集合 280

6.5.1节点和算法 280

6.5.2基类挂钩 281

6.5.3成员挂钩 282

6.5.4 set类摘要 282

6.5.5 set的基本用法 284

6.5.6 set的特有用法 285

6.5.7 multiset类摘要 288

6.5.8 multiset的用法 288

6.6无序集合 289

6.6.1节点和算法 289

6.6.2基类挂钩 290

6.6.3成员挂钩 290

6.6.4 unordered_set类摘要 291

6.6.5 unordered_set的基本用法 293

6.6.6 unordered_set的特有用法 294

6.6.7 unordered_multiset类摘要 297

6.6.8 unordered_multiset的用法 297

6.7其他议题 298

6.7.1同时使用多个挂钩 298

6.7.2链接模式 300

6.7.3万能挂钩 301

6.8总结 302

第7章 多索引容器 303

7.1概述 303

7.2入门示例 304

7.2.1简单的例子 304

7.2.2复杂的例子 305

7.2.3更复杂的例子 307

7.3基本概念 310

7.3.1索引 310

7.3.2索引说明 311

7.3.3键提取器 312

7.3.4索引说明列表 313

7.3.5索引标签 313

7.3.6多索引容器 314

7.4键提取器 315

7.4.1定义 315

7.4.2 identity 316

7.4.3 member 317

7.4.4 const_mem_fun 318

7.4.5 mem_fun 320

7.4.6 global_fun 321

7.4.7自定义键提取器 321

7.5序列索引 322

7.5.1索引说明 322

7.5.2类摘要 323

7.5.3用法 324

7.6随机访问索引 326

7.6.1索引说明 326

7.6.2类摘要 326

7.6.3用法 327

7.7有序索引 328

7.7.1索引说明 329

7.7.2类摘要 329

7.7.3基本用法 331

7.7.4高级用法 332

7.8散列索引 335

7.8.1索引说明 336

7.8.2类摘要 336

7.8.3用法 337

7.9修改元素 339

7.9.1替换元素 339

7.9.2修改元素 340

7.9.3修改键 343

7.10多索引容器 344

7.10.1类摘要 344

7.10.2用法 345

7.11组合索引键 348

7.11.1类摘要 348

7.11.2用法 349

7.11.3辅助工具 350

7.12总结 352

第8章 流处理 353

8.1概述 353

8.1.1标准库的流处理 353

8.1.2 Boost的流处理 355

8.2入门示例 356

8.2.1示例1 356

8.2.2示例2 358

8.3设备的特征 359

8.3.1设备的字符类型 359

8.3.2设备的模式 360

8.3.3设备的分类 362

8.4设备 363

8.4.1设备概述 363

8.4.2数组设备 364

8.4.3标准容器设备 366

8.4.4文件设备 367

8.4.5空设备 369

8.5过滤器 370

8.5.1过滤器概述 370

8.5.2管道和设备链 371

8.5.3计数过滤器 373

8.5.4换行过滤器 375

8.5.5正则表达式过滤器(Ⅰ) 377

8.5.6正则表达式过滤器(Ⅱ) 379

8.5.7压缩过滤器 381

8.6流 383

8.6.1基本流 384

8.6.2过滤流 385

8.7流处理函数 387

8.8定制设备 389

8.8.1定制源设备 390

8.8.2定制接收设备 392

8.9定制过滤器 393

8.9.1过滤器实现原理 393

8.9.2 aggregate_filter 394

8.9.3 basic_line_filter 396

8.9.4手工打造过滤器 397

8.10组合设备 401

8.10.1 combine 401

8.10.2 compose 402

8.10.3 invert 403

8.10.4 restrict 405

8.10.5 tee 406

8.11其他议题 408

8.12总结 410

第9章 序列化 411

9.1编译与使用 411

9.1.1编译 411

9.1.2使用 413

9.2入门示例 414

9.2.1示例1 414

9.2.2示例2 415

9.2.3示例3 417

9.3基本概念 418

9.3.1存档(archive) 419

9.3.2可序列化 420

9.3.3序列化和反序列化 420

9.4存档 421

9.4.1输出存档 421

9.4.2输入存档 422

9.4.3类继承体系 423

9.4.4 XML格式存档 424

9.4.5异常 426

9.5使用序列化 426

9.5.1基本类型的序列化 427

9.5.2数组的序列化 428

9.5.3标准类型的序列化 430

9.5.4标准容器的序列化 431

9.5.5 Boost类型的序列化 431

9.5.6 Boost容器的序列化 434

9.6定制序列化 436

9.6.1可序列化的要求 436

9.6.2侵入式可序列化 438

9.6.3非侵入式可序列化 440

9.6.4 Boost类型的可序列化 441

9.6.5 Boost容器的可序列化 444

9.7高级定制序列化 446

9.7.1派生类的序列化 447

9.7.2序列化的版本 448

9.7.3序列化的实现等级 449

9.7.4序列化的跟踪属性 451

9.8指针的序列化 453

9.8.1指针可序列化的要求 453

9.8.2原始指针的序列化 454

9.8.3智能指针的序列化 454

9.8.4派生类指针的序列化 455

9.8.5指针容器的序列化 457

9.9实用工具 457

9.9.1 BOOST_STRONG_TYPEDEF 458

9.9.2 BOOST_STATIC_WARNING 458

9.9.3 smart_cast 459

9.9.4 base64编解码 459

9.9.5 base16编解码 462

9.10总结 465

第10章 泛型编程 467

10.1 enable_if 467

10.1.1类摘要 468

10.1.2应用于模板函数 469

10.1.3应用于模板类 470

10.1.4 lazy_enable_if 471

10.1.5 C+++11的enable_if 471

10.2 call_traits 472

10.2.1类摘要 472

10.2.2用法 472

10.2.3实现原理 475

10.3 concept_check 476

10.3.1概述 477

10.3.2基本概念检查 477

10.3.3函数对象概念检查 478

10.3.4标准迭代器概念检查 479

10.3.5新式迭代器概念检查 481

10.3.6容器概念检查 482

10.3.7区间概念检查 484

10.3.8在函数声明中的概念检查 485

10.3.9概念原型类 486

10.4 function_types 488

10.4.1属性标签 488

10.4.2函数类型分类 490

10.4.3函数类型分解 491

10.4.4函数类型合成 492

10.4.5其他议题 493

10.5总结 494

第11章 模板元编程 495

11.1 mpl概述 495

11.2 mpl的整数类型 496

11.2.1概述 496

11.2.2整数类型 498

11.2.3 bool类型 499

11.2.4基本运算 500

11.3 mpl的流程控制 504

11.3.1 if_和if_c 504

11.3.2 eval_if和eval_if_c 505

11.4 mpl的容器 507

11.4.1概述 507

11.4.2 vector 508

11.4.3 string 509

11.4.4 map 511

11.4.5相关元函数 512

11.5 mpl的迭代器 513

11.5.1概述 513

11.5.2相关元函数 514

11.6 mpl的算法 515

11.6.1插入器 515

11.6.2查询算法 516

11.6.3变换算法 518

11.6.4运行时算法 519

11.7 mpl的高级用法 521

11.7.1高阶元数据 521

11.7.2占位符 522

11.7.3 bind表达式 523

11.7.4 lambda表达式 524

11.7.5算法的高级应用 525

11.8 mpl的调试 528

11.8.1断言 528

11.8.2打印输出 531

11.8.3 has_xxx 532

11.9 mpl实例研究 532

11.9.1泛型编程版本 533

11.9.2元编程第1版 534

11.9.3元编程第2版 537

11.10总结 539

第12章 开发实践 541

12.1基本工具 541

12.1.1标准整数 542

12.1.2并发 543

12.1.3日志 546

12.2第一个TCP服务器 547

12.2.1 tcp_ buffer 548

12.2.2 tcp_ server 550

12.2.3 tcp_ session 554

12.2.4验证 559

12.2.5使用回调函数 560

12.2.6简单协议的实现 563

12.2.7 HTTP协议的实现 569

12.3多线程工具 571

12.3.1 job_queue 571

12.3.2 worker 574

12.3.3 scheduler 578

12.3.4 safe_map 580

12.3.5 safe_singleton 585

12.4第二个TCP服务器 586

12.4.1消息结构定义 587

12.4.2 tcp_message 588

12.4.3 tcp_session 591

12.4.4 tcp_server 597

12.4.5实现echo协议 599

12.4.6实现聊天室 601

12.5总结 610

第13章 Effective Boost 613

13.1基本原则 613

13.2内存管理 617

13.3容器、迭代器和算法 618

13.4其他 620

13.5结束语 622

附录A推荐书目 623

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

附录C程序员的工具箱 637