Maison > développement back-end > C++ > 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 ?

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 ?

DDD
Libérer: 2024-11-02 07:31:29
original
673 Les gens l'ont consulté

Why Do Member Functions of Template Classes Require the `template` Keyword When Called from Template Functions?

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!
}
Copier après la connexion

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
}
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal