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 ?

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
DDDoriginal
2024-11-02 07:31:29571parcourir

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

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!

Déclaration:
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