Maison > Article > développement back-end > Pourquoi l'appel d'un modèle de fonction membre à partir d'une fonction basée sur un modèle nécessite-t-il le mot-clé « modèle » ?
Fonction membre d'invocation de classe basée sur un modèle à partir d'une fonction basée sur un modèle
Dans l'extrait de code fourni, l'appel d'un modèle de fonction membre à partir d'un autre modèle entraîne une erreur de compilation. Plus précisément, le code tente d'appeler A
Pour résoudre ce problème, le mot-clé template doit être explicitement spécifié avant l'invocation de la fonction membre. En effet, selon la norme C '03 14.2/4, lorsque le nom d'une spécialisation de modèle de membre apparaît après une expression postfixée ou un identifiant qualifié qui dépend d'un paramètre de modèle, le nom du modèle de membre doit être préfixé par le mot-clé de modèle. .
Par conséquent, le code suivant est correct :
<code class="cpp">template<class T> void g() { A<T> a; a.template f<3>(); // Explicitly specify 'template' keyword }</code>
En ajoutant le mot-clé template, le compilateur peut identifier correctement que f est un modèle membre du modèle de classe A, et il peut appeler avec succès A
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!