2
我想拿出一个通用模板来合并一个元组中的元组或列表的类型列表。编译时出现错误。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