mardi 24 juillet 2012

Template aliases

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: