首页 > 解决方案 > 将 const 引用传递给线程

问题描述

我需要将一些数据传递给以下方法:

thread::thread(_Fp&& __f, _Args&&... __args)

但是,我的数据是const&并且没有复制或移动构造函数。我想知道如何使它工作?

标签: c++multithreadingreference

解决方案


使用std::cref.

这“包装了一个参考”,所以你绕过std::thread了复制你的论点的倾向。

然后,您有责任确保这样做是线程安全的。

void foo(const int&);

int main()
{
   const int myThing = 42;

   std::thread t(&foo, std::cref(myThing));
   t.join();
}

这在std::thread构造函数的 cppreference 页面上提到:

线程函数的参数按值移动或复制。如果需要将引用参数传递给线程函数,则必须对其进行包装(例如,使用std::refor std::cref)。

…连同一个例子(有点)。


推荐阅读