c++ - 如何创建一个主函数需要引用参数的线程?
问题描述
我需要在线程中创建对变量的引用。当我在下面的代码中执行此操作时,出现两个错误:
C2672: 'std::invoke': 找不到匹配的重载函数
C2893: 无法专门化函数模板“
unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)
”
如何正确编码?
#include <thread>
void foo(double a, double& b)
{
b = a;
}
int main()
{
double a = 0.0, b = 0.0;
std::thread f(foo, a, b);
f.join();
}
解决方案
这就是std::reference_wrapper
它的两个创建者功能,std::ref
用于std::cref
:
std::thread f(foo, a, std::ref(b));
std::reference_wrapper<T>
是一个有效地表现得像可重新绑定引用的对象:它定义operator T&
了隐式转换为T&
,但可以重新分配。它恰好适用于需要“可复制参考”的情况,例如std::bind
或std::thread
。
用于std::ref
创建对 的非 const 引用x
,以及std::cref
创建对 的 const 引用x
。
推荐阅读
- react-native - 如何将插入平面列表作为项目放入另一个平面列表中?
- sql - 有条件地更新 column1 或 column2 或 column3
- python - 在python中从外部更改和设置封装参数
- python - 如何在python中打印黑桃、红心、钻石等
- swift - 使用 Core Data 等待 withTaskGroup 有时会失败
- node.js - TypeORM + FoalTS 多数据库连接
- algorithm - excel文件中的分配最佳选择
- php - Foreach 循环未定义索引
- python - 当值是列表时如何过滤字典中的数据
- r - 使用拼凑来注释在不同位置有标签的图