Maison > Article > développement back-end > Pourquoi l’invocation d’une fonction membre de modèle dans une fonction de modèle échoue-t-elle en C ?
Invocation d'une fonction membre de modèle dans une fonction de modèle
Dans le code donné, une tentative d'invocation d'une fonction membre de modèle f dans une fonction de modèle g échoue avec des erreurs de compilation :
<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 (Line 18) }</code>
Selon la norme C (14.2/4), lorsqu'une spécialisation de modèle membre est appelée après un ., le mot-clé template doit être explicitement spécifié pour la différencier d'un non- fonction membre du modèle.
Pour résoudre l'erreur de compilation, le code doit être modifié comme suit :
<code class="cpp">template<class T> void g() { A<T> a; a.template f<3>(); // add `template` keyword here }</code>
En ajoutant le mot-clé template, le compilateur reconnaît que la fonction invoquée est un modèle membre spécialisation, résolvant l'ambiguïté et permettant au code de se compiler 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!