我确定这是一个简单的设计错误,但我不知道该怎么做。
我想从类的实例中生成一个线程。具体做法是:
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);
。
那么,我在这里误解了什么?在将对象旋转到线程之前,我希望将对象初始化并“实现”,但显然我没有正确使用这些工具。
答案 0 :(得分:1)
由于隐式this
,std::thread
需要Callable
,因此成员函数的调用方式与自由函数的调用方式不同,这比自由函数更灵活。
在你的情况下,最简单的是使用lambda:
std::thread foo_thread( [&] { foo_instance.bar(); } );