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