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 » ?

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 » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 15:58:02427parcourir

Why Does Invoking a Member Function Template from a Templated Function Require the `template` Keyword?

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::f<3>() depuis g(). Cependant, cela échoue en raison d'un problème de syntaxe.

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::f<3>().

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn