文档库

最新最全的文档下载
当前位置:文档库 > boostbind的使用

boostbind的使用

最近在几经波折之后,终于对于boost::bind有点理解了。对于习惯了其他语言的人来说,boost::bind是个挺神奇的东西,它可以将你的方法适配成任何其他的方法。其实这得益于c++的模板以及操作符重载,去看boost::bind的实现就会发现它是一个有n多重载的函数,这些重载主要是为了适应函数的参数个数。

其实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)

boostbind的使用

(共2页)