給定一個參數包和一個字符串向量,我想遞歸地構建一個元組,並且每次都取第一個元組,並將其附加到元組中。所以如果我有一個帶有「string1」,「string2」,「string3」和一個參數包5,2.5,真的向量......結果元組將會是「string1」,5,「string2」,2.5,「string3 「,的確如此。以遞歸方式構建一個元組
繼承人什麼我試過到目前爲止
在我主我做這樣的事情
std::vector<std::string> string_vec;
std::tuple<> t;
//initalize string_vec to something
set_up_strings(string_vec);
//pass an empty tuple to start building with the strings and args
tuple_maker(t, string_vec, args...);
在我的tuple_maker遞歸地把每個之一。
template<typename T, typename... Args, typename... Ts>
void tuple_maker(std::tuple<Ts...> t, std::vector<std::string> &vec, T value, Args... args)
{
auto newTup1 = tuple_append(t, vec.begin());
auto newtup2 = tuple_append(newTup1, value);
vec.erase(vec.begin());
//now pass in the vector and args after removing front of each
tuple_maker(newtup2, vec,args...);
}
最終當沒有更多的指定參數時,該功能將被調用(結束遞歸)
template<typename... Ts>
std::tuple<Ts...> tuple_maker(std::tuple<Ts...> t, std::vector<std::string> &vec)
{
int tup_size = std::tuple_size<decltype(t)>::value;
std::cout<< "final tuple has size of " << tup_size << std::endl;
//return t;
}
如果我通過類似string1-3,和3 ARGS就像我之前提到的,它打印大小爲6的元組,所以我相信它正確地創建了它。但是,我很難將其返回到主函數。我不知道如何設置返回類型,以便它將最終的元組正確地返回到前一個函數,然後返回到main。
參考,助手「tuple_maker」功能,我用的是這裏
template <typename NewType, typename... TupleElem>
std::tuple<TupleElem..., NewType> tuple_append(const std::tuple<TupleElem...> &tup, const NewType &n)
{
return std::tuple_cat(tup, std::make_tuple(n));
}
我想這樣的事情...
template<typename T, typename... Args, typename... Ts, typename... ret>
std::tuple<ret...> tuple_maker(std::tuple<Ts...> t, std::vector<std::string> &vec, T value, Args... args)
如果您使用的是C++ 14,那麼'auto'應該就足夠了......如果不是,您可以嘗試將'auto'與' - > decltype()'結合在一起,在decltype的括號中您應該通過調用生成元組的函數... –
你可以使函數返回類型auto ?,編輯我一直在使用C++ 11,但我會嘗試14 – user2770808
是的,它應該被接受,因爲編譯器可以推導出結果從返回聲明... –