1.使用方法:
boost bind 方法一般需要和boost function配合使用,因为用boost bind 之后返回的会是一个boost function。
boost function:
boost::function<void(int)> f; //声明了一个无返回值,参数为int的boost function。
1.绑定普通函数
void fun(int a,int b);
f = boost::bind(&fun,1,_1);//_1表示预留一个参数位置。
f(2); // 相当于 fun(1,2)
boost::function<void(int,int)> f; // 声明了一个无返回值,参数为int,int的boost function
f = boost::bind(&fun,_1,_2); // _1,_2预留了两个参数的位置。
f(2,3);//相当于 fun(2,3)
2.绑定成员函数
class A {
void test(int a, int b);
};
A a;
typedef boost::function<void(int)> F;
F f = boost::bind(&A::test,&a,_1,_2); //第一个参数为成员函数,第2个参数为要绑定的类指针。如果在类内部,可以使用this,使用方法同 绑定普通函数
2.bind作用
使用bind可以改变代码结构,最常见的用途就是用作回调函数。列如:
class B {
public:
typedef boost::function<void(int)> callback;
void testB(int a,const callback& cb) {
cb(a);
};
};
class A {
public:
void testA(int a, int b) {
b.testB(a,boost::bind(&A::callbackFuc,this,b,_1));
}
void callbackFunc(int a, int b) {};
private:
B b;
};
上述代码 就实现了一个简单的回调。A类中testA调用了B类的testB方法,而testB又回调A的callbackFunc方法,完成回调。
其中testB有2个参数,一个是int a,一个是函数指针boost function。testA中用boost bind 绑定了自己的成员函数callbackFunc,并将b当做第一个参数传给
callbackFunc,并预留了一个将会在testB中传入,这样非常的方便。