首页 > 解决方案 > 如何创建一个主函数需要引用参数的线程?

问题描述

我需要在线程中创建对变量的引用。当我在下面的代码中执行此操作时,出现两个错误:

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++windowsmultithreadingreference

解决方案


这就是std::reference_wrapper它的两个创建者功能,std::ref用于std::cref

std::thread f(foo, a, std::ref(b));

[现场示例]

std::reference_wrapper<T>是一个有效地表现得像可重新绑定引用的对象:它定义operator T&了隐式转换为T&,但可以重新分配。它恰好适用于需要“可复制参考”的情况,例如std::bindstd::thread

用于std::ref创建对 的非 const 引用x,以及std::cref创建对 的 const 引用x


推荐阅读