【发布时间】:2018-11-14 12:07:03
【问题描述】:
我无法找到如何将 std::thread() 与 lambda 一起使用。即,具有可变参数 lambda 通过转发接收参数。举个例子:
template<typename... T>
auto foo(T&&... t){
[](T&&... t){}(std::forward<T>(t)...); // (1)
return std::thread( // (2)
[](T&&... t){},
std::forward<T>(t)...
);
}
auto bar(){
int n=1;
foo(1); (A)
foo(n); (B)
}
A.1:编译
A.2:编译
B.1:编译
B.2:无法编译
我不明白:
- 为什么使用 (B) 的
std::thread()(2) 版本无法编译而 (A.2) 可以编译? - 为什么 (B.1) 和 (B.2) 之间存在差异
【问题讨论】:
-
应该是
std::forward<T>(t)...。我不确定这对你的情况有帮助,因为你有一个单元素包,但仍然。 -
我认为这与错误仍然存在但编辑为具有更清晰的语法ty相同
标签: c++ multithreading c++14 variadic-templates generic-lambda