パラメータパックと文字列のベクトルが与えられたら、一度に1つずつタプルを再帰的に作成し、それをタプルに追加する必要があります。したがって、 "string1"、 "string2"、 "string3"、および5,2.5、trueのパラメータパックを持つベクトルがあった場合、結果のタプルは "string1"、5、 "string2"、2.5、 "string3 "、本当。私は私のtuple_makerが再帰的にそれぞれの1を追加し、この再帰的にタプルを構築する
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...);
ような何かが私のメインの中で、これまで
を試みたものを相続人
。
これ以上引数がない場合、最終的に、この関数が呼び出されます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...);
}
私はstring1-3のようなものを渡す場合
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;
}
、および3引数私は前に述べたように(再帰を終了します)、私はそれが正しく作成されていると思うので、それは6のサイズを持つタプルを印刷します。しかし、私は主な機能に戻すのに問題があります。戻り値の型を設定して、最終タプルを前の関数に正しく戻してからメインに戻す方法はわかりません。参照用
は、私が使用するヘルパー「tuple_maker」関数は、ここであなたが非最終版から値を返す必要があり
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)
もし 'auto'の結果が十分であれば、' auto'を ' - > decltype()'と組み合わせて実験することができます。ここで、decltypeのかっこでは、タプルを生成する関数の呼び出し... –
あなたは関数の型の自動を返すことができますか?編集私はC++ 11を使ってきましたが、私は試みます14 – user2770808
はいそれはコンパイラが結果を推論することができるように受け入れられるべきです返信文から... –