C++ bind是如何应用于回调函数的

考虑如下的场景,在一个类的start方法中,开了一个线程,这个线程需要绑定到一个函数,这个在这个函数中又要用到类的一些成员变量

class Compositor {
public:
    void start();  
    Compositor* getComposer() { return mComposer; }
    void doTask() { printf("do something"\n); } 
private:
    Composer* mComposer;
    thread*    mThread;
};

void working_thread(void* userdata)
{
    Compositor* compositor = (Compositor*)userdata;
  compositor->getComposer()->doTask();
}

void Compositor::start()
{
     mThread = new thread(working_thread, this);
}    

然后呢,这个working_thread还要声明为Compositor的友元函数才行,在里面内还要把void*解出来强转成Compositor*, 为了使用类的一些变量还要专门把一些成员通过接口返回出去,这样才能正常使用,总之就是比较麻烦。下面看看bind是如何改善这种情况的

void Compositor::start() 
{
  auto f = std::bind( &Compositor::doTask, this);
  mThread =
new thread(f, userdata);
}

posted on 2022-01-09 12:32  疾速瓜牛  阅读(278)  评论(0编辑  收藏  举报

导航