boost::bind 方法浅析

来源:互联网 发布:男生轻微sm知乎 编辑:程序博客网 时间:2024/05/21 19:25

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中传入,这样非常的方便。