C++ std::bind

来源:互联网 发布:日程管理 知乎 编辑:程序博客网 时间:2024/04/30 20:40

std::function std::bind

下面是通过这两个实现 函数执行体跟函数上下文的动态绑定 (C++闭包) 

#include <iostream>#include <functional>using namespace std; typedef std::function<void(char*)> ccMenuCallback;class B{public:    virtual ~B(){}        B(){cout<< "B::B()" << endl;}        B(const ccMenuCallback& _callback){        cout<< "B::Bcallback()" << endl;        this->_callback = _callback;        cout<< "B::Be()" << endl;    }        void bf() {        cout<< "B::bf()" << endl;        _callback(this->name);    }        ccMenuCallback _callback;    char *name = "Bname";};class A {public:    virtual ~A(){}    A(){}        void f(char* name) {        cout << "A::f()" << this->inta<< name<< endl;    }    void init() {         //注意        ccMenuCallback f = std::bind(&A::f,this,std::placeholders::_1);      //  f();         pb = new B(f);             }        B *pb;    int inta = 5;};int main() {        A* pa = new A;    pa->init();  //  pa->pb->_callback();    pa->pb->bf();        return 0;}
理解上面注意下面2点:

 1.    B::bf(), 不需要显式的A类对象,而是直接函数式调用,

2.     可以访问绑定到其上的A成员变量inta , 同时他还可以传入额外的数据B类的name.


0 0
原创粉丝点击