我试图找出一种方法来捕获一个可变参数包,它可以由 l 和 r 值引用组成,并按值捕获 r 值,同时通过引用捕获 l 值以供以后使用(因此是异步测试)。我尝试了以下方法:
#include <iostream>
#include <tuple>
#include <future>
template<typename... T>
auto bar(T&&... values)
{
return [tup = std::forward_as_tuple(values...)](){
std::cout << std::get<0>(tup) << std::endl;
};
}
int lValue = 50;
int main ()
{
auto rvalues = bar(50);
auto lvalues = bar(lValue);
auto futureR(std::async(rvalues));
auto futureL(std::async(lvalues));
futureR.get();
futureL.get();
return 0;
}
然而,这在执行 rvalues lambda 时会输出一个未定义的值。左值 lambda 输出所需的 50 而无需复制构造(可能与大对象一起使用)。是否有某种方法可以按值捕获 r 值,而无需复制构造由 l 值引用传递的对象,不知道我会得到什么样的 l 和 r 值组合?
auto mixedValues = bar(50, lValue);
auto futureMixed(std::async(mixedValues));
链接到示例 shell http://cpp.sh/336lv