简介

Boost是一个开源、跨平台、功能强大的c++库,并且是除了stl外最常用的库,实现了很多基本操作,使开发变得简单、快捷。

01 Signals2

Signals2是基于Boost的另一个库Signals,实现线程安全的观察者模式。

通俗来讲,信号就是一个触发器,插槽就是一些列的回调函数,当信号发射时,也就是触发器被触发的时候,所有回调函数都将被调用。
信号/插槽机制功能就是把这些功能相关的函数汇集到一起,在某一时刻,按顺序依次调用。

02 Bind

bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定的参数个数和要绑定的调用对象类型,总共有数十个不同的形式,但它们的名字都叫做bind,编译器会根据具体的绑定代码自动确定要使用的正确形式。

bind接受的第一个参数必须是一个科调用对象f,包括函数指针、函数引用、成员函数指针和函数对象,之后bind接受最多九个参数,参数的数量必须与f的参数数量相等,这些参数将被传递给f作为形参。

绑定完成后,bind会返回一个函数对象,它内部保存了f的拷贝,具有operator(),返回值类型被自动推导为f的返回值类型。在发生调用时,这个函数对象将把之前存储的参数转发给f完成调用。

03 Thread

线程,是各种项目中经常会用到的一个技术,而一般提到线程都会涉及到多线程,多线程当中最经典的问题就是同步访问共享资源,和其他几乎所有语言一样boost也是通过提供互斥锁来解决的,但不同的是boost提供了多个互斥类,使得项目可以更灵活的处理共享资源。

04 Chrono

Chrono是Boost库中用于时间处理的库,主要包含三个概念时间段(duration),时间点(time_point)和时钟(clock)。

05 Test

Boost中Test模块是用来给代码做单元测试的,测试的方法是白盒测试,所以编写测试必须对待测试的模块有深度的理解,然后再对正常功能和可能会出现的问题进行测试,测试的实际过程就是给定输入判定是否和预期的输出相同,所以Test本质上也是个验证等式的工具外加了一层包装。

测试过程中三个主要的工具是:

BOOST_WARN 
BOOST_CHECK 
BOOST_REQUIRE

另外,对于浮点数比较,BOOST还提供了BOOST_CHECK_CLOSE_FRACTION(left-value, right-value, tolerance-limit),调用的过程中left-value和right-value的类型要一致,否则会报错。

TEST中还有一个比较重要的概念是叫做TEST FIXTURE,是指为测试case开始时设置一个上下文环境,测试结束时清楚环境。具体来说就是定义一个新的对象在对象的构造函数中完成环境设置工作,在对象的析构函数中完成清除工作。

06 Program options (程序参数模块)

在编写命令行程序时,经常会碰到的一个问题就是参数解析问题,就是说我们在运行程序时给程序附上不同的参数值使得程序能够完成不同的功能。

而boost中的program options就是用来处理命令行传入的参数的模块,使得程序更简洁高效。