c++ - 将 const 引用传递给线程
问题描述
我需要将一些数据传递给以下方法:
thread::thread(_Fp&& __f, _Args&&... __args)
但是,我的数据是const&
并且没有复制或移动构造函数。我想知道如何使它工作?
解决方案
使用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::ref
orstd::cref
)。
…连同一个例子(有点)。
推荐阅读
- javascript - Vue.js 中元素数组的 V-model
- javascript - 根据用户所在的页面更改导航组件
- javascript - JavaScript范围:在函数中保留数组中的对象
- visual-studio - 关闭应用程序时Android模拟器无法拦截短信
- javascript - 如何使用 React Native 检测 Android 手机中的电话?
- javascript - JavaScript 过滤器返回 true 但不过滤
- bash - JQ:输出静态值/变量
- sharepoint - Microsoft SharePoint Foundation 订阅设置服务应用程序停留在“正在启动”
- ios - Swift - 如何将触摸事件传递给多个按钮,这些按钮是第二个 UIWindow 的一部分,但忽略其他所有内容
- python - 如何根据多列对 Pandas 数据框进行排序/排名