boost::bind()

来源:互联网 发布:seo分析工具 编辑:程序博客网 时间:2024/06/05 02:16

其实boost::bind的原理是函数对象,而函数对象就是一个重载了()操作符的对象,这样我们就可以像调用一个方法一样来调用一个类上的这个操作符,比如a(),其实你是在调用a这个对象的()方法,而不是调用一个叫a的方法。

一般来说boost::bind有两种方式的调用,一种是对自由方法,也取非类方法, 一种是对类方法。

对自由方法来说,直接boost::bind(函数名, 参数1,参数2,…)
对类方法来说,直接boost::bind(&类名::方法名,类实例指针,参数1,参数2)

这里需要额外注意的问题是,函数对象也可以像自由方法一样被bind,而boost::function也是一种函数对象。

接下来我们需要注意什么情况下需要用_1, _2这样的参数。

举个例子
void test(int a, int b, int c)

boost::bind(test, 1, _1, _2)得到一个函数对象b,当我们调用b(3,4)时,相当于调用test(1,3,4)
boost::bind(test, _2, 3, _1)得到一个函数对象b,当我们调用b(3,4)时,相当于调用test(4,3,3)

看明白了没有?你实际上可以指定一些常量和一些占位符进去,_x这样的就是占位符,_1表示实际调用时的参数位置,也即b(3,4)时_1代表3,_2代表4

当然你也可以将所有的参数都指定
比如boost::bind(test,1,2,3),那么在调用b()时就相当于调用test(1,2,3)

原创粉丝点击