如何创建一个主函数需要引用参数的线程?
Posted
技术标签:
【中文标题】如何创建一个主函数需要引用参数的线程?【英文标题】:How to create a thread whose main function requires a reference argument? 【发布时间】:2019-09-12 07:18:54 【问题描述】:我需要在线程中创建对变量的引用。当我在下面的代码中执行此操作时,出现两个错误:
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();
【问题讨论】:
C++ Thread function pass by reference的可能重复 【参考方案1】:这就是std::reference_wrapper
及其两个创建者函数std::ref
和std::cref
的用途:
std::thread f(foo, a, std::ref(b));
[Live example]
std::reference_wrapper<T>
是一个有效行为类似于可重新绑定引用的对象:它定义了 operator T&
用于隐式转换为 T&
,但可以重新分配。它专门用于需要“可复制引用”的情况,例如std::bind
或std::thread
。
使用std::ref
创建对x
的非常量引用,使用std::cref
创建对x
的常量引用。
【讨论】:
std::ref
适用于任何类型的指针。抱歉我之前的评论,我在我的代码中发现了一个错误。以上是关于如何创建一个主函数需要引用参数的线程?的主要内容,如果未能解决你的问题,请参考以下文章