第二章函数对象

时间:2022-10-01 16:07:37

3.1 Boost.Bind

它简化了由C++标准中的std::bind1st和 std::bind2st模板函数所提供的一个机制:将这些函数与几乎不限数量的参数一起使用,就可以得到指定签名的函数。

扩展:一个绑定器使用另一个函数对象f()和参数值V创建一个函数对象。被绑定函数对象必须为双目函数,也就是说有两个参数,A和B。STL 中的帮定器有:
·bind1st() 创建一个函数对象,该函数对象将值V作为第一个参数A。
·bind2nd()创建一个函数对象,该函数对象将值V作为第二个参数B。
 3.2.Boost.Ref 

 本库Boost.Ref通常与Boost.Bind一起使用,所以我把它们挨着写。它提供了两个函数-boost::ref()和 boost::cref()- 定义于boost/ref.hpp. 当要用于boost::bind()的函数带有至少一个引用参数时,Boost.Ref就很重要了。由于boost::bind() 会复制它的参数,所以引用必须特别处理。

3.3 Boost.Function

为 了 封 装 函 数 指 针 ,Boost.Function 提 供 了 一 个 名 为 boost::function 的 类 。 它 定 义 于boost/function.hpp.在调用这样的一个函数时,传入的第一个参数表示了该函数被调用的那个特定对象。因此,在模板定义中的左括号后的第一个参数必须是该特定类的指针。接下来的参数才是表示相应的成员函数的签名。这个程序还使用了来自Boost.Ref库的boost::ref(),它提供了一个方便的机制向Boost.Function传递引用。

 3.4.Boost.Lambda

匿名函数- 又称为lambda 函数- 已经在多种编程语言中存在,但C++除外(C++11中已经加入)。lambda 函数的目标是令源代码更为紧凑,从而也更容易理解。