Maison > Article > développement back-end > Pourquoi les fonctions membres des classes de modèles nécessitent-elles le mot-clé « modèle » lorsqu'elles sont appelées à partir des fonctions de modèle ?
Fonctions membres des classes de modèles : invocation à partir des fonctions de modèle
En C , une erreur de compilation particulière se produit lors de la tentative d'appel d'une fonction membre de une classe de modèle à partir d’une fonction de modèle sans spécifier explicitement le mot-clé de modèle. Considérez le code suivant :
template<class X> struct A { template<int I> void f() {} }; template<class T> void g() { A<T> a; a.f<3>(); // Error! }
Le compilateur rencontre une erreur à la ligne 18, indiquant que le nom de la fonction membre n'est pas reconnu. En effet, comme indiqué dans la norme C (14.2/4), le nom d'une spécialisation de modèle de membre doit être préfixé par le mot-clé template lorsqu'il est invoqué dans certains scénarios.
Pour corriger le problème, modifiez simplement le code pour inclure explicitement le mot-clé du modèle :
template<class T> void g() { A<T> a; a.template f<3>(); // Add `template` keyword here }
Le code mis à jour se compile avec succès car il respecte les exigences de la norme, spécifiant que le nom du modèle membre doit être qualifié avec le mot-clé du modèle lorsqu'il est utilisé dans le contexte d'un fonction de modèle.
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!