Chcę napisać szablon klasy InvTuple
, który definiuje type
jako krotka argumentów klasowych w kolejności odwrotnej. Tak to powinno działać jakArgumenty odwróconej tupii
InvTuple<T1, T2, T3, ...>::type ---> tuple<..., T3, T2, T1>
I tak jak zdefiniowano go
template<class...T>
struct InvTuple;
template<class T1, class...T>
struct InvTuple < T1, T... >
{
template<class... U>
using doInvert = typename InvTuple<T...>::doInvert < U..., T1 > ;
// <--- unrecognizable template declaration/definition,
// syntax error : '<'
using type = doInvert<>;
};
template<>
struct InvTuple <>
{
template<class... U>
using doInvert = tuple<U...>;
using type = doInvert < > ;
};
Ale to nie skompilować z powodu błędu, jak pokazano w kodzie. Pomóż mi zrozumieć, co jest nie tak.
Wow! Najpierw nie zdawałem sobie nawet sprawy, dlaczego inwersja ma miejsce, gdy 'T1' jest postawione jako pierwsze. Ale to działa, wielkie dzięki! –