Les "typedef de templates" est une fonctionnalité qui est souvent demandée, et C++11 la fournit! Plutôt que le mot-clé "typedef", c'est une syntaxe à base du mot-clé "using" qui est utilisée, mais l'idée est la même:
template<typename T1, typename T2, typename T3> class A { }; template<typename T1, typename T3> using A_int = A<T1, int, T3>; template<typename T> using A_same = A<T, T, T>;
Notons que la même fonctionnalité était disponible en C++03 en passant par une classe intermédiaire:
template<typename T1, typename T2, typename T3> class A { }; template<typename T1, typename T3> class A_int { typedef A<T1, int, T3> TypeT; }; template<typename T> class A_same { typedef A<T, T, T> TypeT; };
L'on pouvait utiliser alors A_int::TypeT et A_same::TypeT, mais c'est quand même plus joli lorsque l'on peut écrire ses "using" directement. À noter que la syntaxe "using" permet également de renommer des types non templatés, exactement comme le typedef:
using MyInt = int;
Surtout du sucre syntaxique, donc, mais du sucre qui devrait rendre le code plus clair en évitant la multiplication de classes triviales ne servant qu'à renommer ses types.
Aucun commentaire:
Enregistrer un commentaire