Programmation C-C++/Les templates/Mot-clé typename

Cours de C/C++
^
Les templates
Généralités
Déclaration des paramètres template
Fonctions et classes template
Instanciation des template
Spécialisation des template
Mot-clé typename
Fonctions exportées

Livre original de C. Casteyde

Nous avons déjà vu que le mot clé typename pouvait être utilisé pour introduire les types génériques dans les déclarations template. Cependant, il peut être utilisé dans un autre contexte pour introduire les identificateurs de types inconnus dans les template. En effet, un type générique peut très bien être une classe définie par l'utilisateur, à l'intérieur de laquelle des types sont définis. Afin de pouvoir utiliser ces types dans les définitions des template, il est nécessaire d'utiliser le mot clé typename pour les introduire, car a priori le compilateur ne sait pas que le type générique contient la définition d'un autre type. Ce mot clé doit être placé avant le nom complet du type :

typename identificateur

Le mot clé typename est donc utilisé pour signaler au compilateur que l'identificateur identificateur est un type.

Exemple 12-15. Mot-clé typename

modifier
class A
{
public:
    typedef int Y;    // Y est un type défini dans la classe A.
};

template <class T>
class X
{
    typename T::Y i;  // La classe template X suppose que le
                      // type générique T définisse un type Y.
};

X<A> x;              // A peut servir à instancier une classe
                      // à partir de la classe template X.