"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 » ?

Publié le 2024-11-06
Parcourir:512

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

Fonction membre de l'appel 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() 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 :

template void g()
{
   A a;
   a.template f();  // Explicitly specify 'template' keyword
}

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().

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3