Maison > développement back-end > C++ > le corps du texte

Pourquoi le compilateur ne parvient-il pas à compiler lors de l'appel d'une fonction membre de modèle dans une fonction de modèle ?

Patricia Arquette
Libérer: 2024-11-02 16:08:29
original
763 Les gens l'ont consulté

Why does the compiler fail to compile when invoking a template member function within a template function?

Invocation de fonction membre de modèle dans les fonctions de modèle

L'extrait de code fourni illustre une erreur rencontrée lors de l'appel d'une fonction membre de modèle à partir d'une fonction de modèle :

<code class="cpp">template<class X> struct A {
   template<int I> void f() {}
};

template<class T> void g()
{
   A<T> a;
   a.f<3>();  // Compilation fails here
}</code>
Copier après la connexion

Le compilateur ne parvient pas à compiler ce code, signalant une erreur liée à une utilisation non valide du membre et suggérant que '&' a peut-être été oublié.

Explication

L'erreur se produit car le code tente d'invoquer un modèle de membre sans spécifier explicitement le mot-clé 'template' avant celui-ci. Selon la norme C (14.2/4), lorsque le nom d'une spécialisation de modèle de membre est utilisé après un point ou une flèche dans une expression suffixe, ou après un spécificateur de nom imbriqué dans un identifiant qualifié, et l'expression postfixée ou l'identifiant qualifié dépend explicitement d'un paramètre de modèle, le nom du modèle membre doit être préfixé par le mot clé « modèle ». Sinon, le nom sera supposé faire référence à un non-modèle.

Solution

Pour résoudre ce problème, le code doit être modifié pour spécifier explicitement le 'modèle ' avant le nom du modèle de membre :

<code class="cpp">template<class T> void g()
{
   A<T> a;
   a.template f<3>();  // add 'template' keyword here
}</code>
Copier après la connexion

Avec cette modification, le compilateur pourra identifier et appeler correctement la fonction du modèle de membre, et le code sera compilé avec succès.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal