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;
내가 점점 오전 오류가 나는 당신의 충고를 따랐다 및 몇 가지 추가 변경을 통보 하워드 Hinnant 에 대해 다음
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