Référencement des modèles [langage C++]
Cette rubrique indique comment utiliser un modèle qui a été déclaré précédemment.
template-name < template-arg-list >
Notes
template-arg-list doit être une liste séparée par des virgules comprenant des :
expressiontype-name
Tous les arguments expression doivent être des expressions constantes. Le compilateur crée une nouvelle instance (appelée instanciation) de la classe ou de la fonction basée sur un modèle s'il n'existe aucune correspondance avec un modèle généré précédemment. Par exemple, pour référencer la classe MyStack définie dans Modèles de fonctions membres :
MyStack< unsigned long, 5 > stack1;
// Creates a stack of unsigned longs.
MyStack< DWORD, 5 >stack2;
// Uses code created above.
MyStack< char, 6 > stack3;
// Generates new code.
MyStack< MyClass, 6 > stack4;
// Generates stack of MyClass objects.
Chaque modèle de fonction généré crée ses propres variables et membres statiques.
Tous les arguments template doivent être accessibles au point où ils sont utilisés.
L'exception à la règle de syntaxe ci-dessus est l'identification d'une spécialisation de modèle de membre dans une expression après les opérateurs ::, . ou ->. Après ces opérateurs, le mot clé template peut être spécifié. Visual C++ s'éloigne de la norme en ceci que le mot clé template est toujours facultatif dans ce contexte alors que la norme le requiert dans certains cas. Le mot clé template ne peut pas être utilisé dans la spécialisation, sauf après les opérateurs ci-dessous.
[ :: | -> | . ] template template-name < template-arg-list >
Par exemple, le code suivant spécifie un appel à la spécialisation int du modèle de fonction membre f<T>(int), qui est un membre de la classe X et la passe au paramètre 10.
X::template f<int>(10);