来自现有类的C ++ 11线程

时间:2015-01-23 23:23:11

标签: linux multithreading c++11

我确定这是一个简单的设计错误,但我不知道该怎么做。

我想从类的实例中生成一个线程。具体做法是:

class Foo
{
    public:
        void bar() { /*do stuff*/ }
};

用法:

int main()
{
    Foo foo_instance();

    std::thread foo_thread(foo_instance.bar);

    foo_thread.join();

    return 0;
}

当我编译更详细的版本时,我会invalid use of non-static member function引用行std::thread foo_thread(foo_instance.bar);

那么,我在这里误解了什么?在将对象旋转到线程之前,我希望将对象初始化并“实现”,但显然我没有正确使用这些工具。

1 个答案:

答案 0 :(得分:1)

由于隐式thisstd::thread需要Callable,因此成员函数的调用方式与自由函数的调用方式不同,这比自由函数更灵活。

在你的情况下,最简单的是使用lambda:

std::thread foo_thread( [&] { foo_instance.bar(); } );