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時,這些東西會變得非常混亂.... –