我知道存在this个问题和this问题。 我已经通过了他们两个并且没有能够解决我的问题。我能够为带有零参数的类成员函数运行示例,但是如果成员函数有参数,则无法推断线程的构造函数是什么样的。
我有一个A类.A有一个成员函数f,它带有2个参数p1和p2。 我已经实例化了A类的对象a。我想在一个线程中调用函数f。
template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );
是我必须编写构造函数的方法。
我无法破译上述定义。如何调用定义为
的a.f(p1,p2) void A::f(int p1, int p2)
在一个帖子中?
答案 0 :(得分:7)
只需传递参数:
std::thread t(&A::f, &bar, p1, p2);
t.join();
注意:请注意,我们正在传递bar
对象的地址,否则线程构造函数会复制您的对象。通过这样做,你必须保证你的对象比你的线程更长。请注意,其他参数也是如此。如果是参数,您只需使用std::ref
。
一般情况下,正如我在其他帖子中所提到的,std::thread
构造函数是根据INVOKE
定义(§20.8.2.1)定义的:
按如下方式定义INVOKE(f,t1,t2,...,tN):
- (t1。* f)(t2,...,tN)当f是指向类T的成员函数的指针时,t1是类型为T的对象或对象的引用 输入T或对从T派生的类型的对象的引用;
- ((* t1)。* f)(t2,...,tN)当f是指向类T的成员函数的指针时,t1不是前面描述的类型之一 项;
- t1。* f当N == 1且f是指向类T的成员数据的指针时,t 1是类型为T或者对象的对象 引用类型为T的对象或引用对象的对象 类型派生自T;
- (* t1)。* f当N == 1且f是指向T类成员数据的指针时,t 1不是前一项中描述的类型之一;
- f(t1,t2,...,tN)在所有其他情况下。