1

我想做这样的事情:

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但它没有提到成员函数位于新对象中的情况。什么是正确的语法?

4

2 回答 2

0

指向成员函数的指针与函数不同。你不能把一个传给std::thread. 您可以做的是声明一个my_b以参数为参数并调用b_start它的函数,然后将函数传递my_bstd::thread. 或者,这是 C++11,您可能可以使用 lambda:

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

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

于 2012-08-22T02:27:55.210 回答
0

有很多方法可以实现这一点,例如使用 std::bind 或使用 trampoline 成员函数,但我可能只使用 lambda,如下所示:

std::thread t([&](){my_b->b_start();});
于 2012-08-22T02:34:22.157 回答