2
タプルやタプルのリストを1つのタプルにマージするための汎用テンプレートを考え出しています。コンパイル時にエラーが発生します。C++ 0xタプルをマージする
template<typename... Types>
struct merge_tuples{ typedef std::tuple<> type;};
template<typename Type>
struct merge_tuples<Type> {
typedef std::tuple<Type> type;
};
template<typename...Types>
struct merge_tuples<std::tuple<Types...>> {
typedef std::tuple<Types...> type;
};
template<typename...Types1,typename...Types2>
struct merge_tuples<std::tuple<Types1...>,std::tuple<Types2...>> {
typedef std::tuple<Types1...,Types2...> type;
};
template<typename...Types1,typename...Types2,typename...Rest>
struct merge_tuples<std::tuple<Types1...>,std::tuple<Types2...>,Rest...> {
typedef decltype(merge_tuples<std::tuple<Types1...,Types2...>,decltype(merge_tuples<Rest...>::type)>::type) type;
};
template<typename...Types1,typename Type>
struct merge_tuples<std::tuple<Types1...>,Type> {
typedef std::tuple<Types1...,Type> type;
};
typedef std::tuple<int,double> int_double;
typedef merge_tuples<int_double,int_double,int_double>::type megred;
私は取得していますエラーは、私はあなたのアドバイスを取り、いくつかの追加の変更を行っアドバイスハワードヒナント ため、次の
lalr_grammar.cpp:152:97: error: unexpected type name 'type': expected expression
typedef decltype(merge_tuples<std::tuple<Types1...,Types2...>,decltype(merge_tuples<Rest...>::type)>::type) type;
^
lalr_grammar.cpp:420:11: note: in instantiation of template class 'merge_tuples<std::__1::tuple<int, double>, std::__1::tuple<int, double>, std::__1::tuple<int, double> >' requested here
typedef merge_tuples<int_double,int_double,int_double>::type megred;
は何ですか作品エラー?なぜあなたは答えを求めているときにそれを与えないことで、私たちのためにそれをもっと難しくしますか? – Nobody
'std :: tuple_cat'はあなたがやろうとしていることをすでにしていますか? (私は 'merge_tuples'が実際に何をしているのか分かりません)。 –
merge_tuplesはタプルやタプルのリストから新しいタプルを作成します tuple_catは私の望むようには見えませんでした。それを調べますagian – James