使用C++0x std::thread调用新ed对象中的成员函数



我想做这样的事情:

class A {
public:
    void a_start () {
        // somewhere in A: my_b = new B();
        std::thread t(my_b->b_start);   // won't compile
    }
private:
    B* my_b;
};
class B {
public:
    void b_start();
};

但它不会编译。我试着看http://accu.org/index.php/journals/1584但它没有提到成员函数位于新ed对象中的情况。正确的语法是什么?

有很多方法可以实现这一点,比如使用std::bind或使用蹦床成员函数,但我可能只使用lambda,比如:

std::thread t([&](){my_b->b_start();});

指向成员函数的指针与函数不是一回事。不能将一个传递给std::thread。您可以声明一个以my_b为参数并对其调用b_start的函数,然后将该函数和my_b传递给std::thread。或者,这是C++11,你可能可以使用lambda:

void a_start() {
    std::thread t([](B* b){b->b_start();}, my_b);
}

(注意:我自己还没有试过编译这个)。

最新更新