0
我试图找出一种方法来捕获一个可以由l和r值引用组成的可变数据包,并通过引用捕获l值来捕获r值,供以后使用(因此异步测试)。我尝试了以下操作:复杂的元组捕获
#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));
链接到例如外壳http://cpp.sh/336lv
是的!这就是我所需要的,真棒,我害怕我需要一些大的丑陋元函数来将l值类型改回l值引用或其他东西,当你必须捕获到lambda时,这些东西会变得非常混乱.... –