我想做这样的事情:
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);
}
(注意:我自己还没有试过编译这个)。