Maison >développement back-end >C++ >Pourquoi mon typedef dans un modèle de classe de base est-il inaccessible dans mon modèle de classe dérivé ?

Pourquoi mon typedef dans un modèle de classe de base est-il inaccessible dans mon modèle de classe dérivé ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-09 15:51:10780parcourir

Why is my typedef in a base class template inaccessible in my derived class template?

Typedef non reconnu dans un modèle de classe dérivé

Lors de la déclaration d'un modèle de classe dérivé B qui hérite d'un modèle de classe de base A, il est prévu que les typedefs défini dans A serait accessible dans B. Cependant, dans l'exemple fourni, l'accès à Vec_t dans B échoue avec une erreur indiquant qu'il est non reconnu.

Selon la norme C (14.6.2/3), dans les définitions de modèles de classe et les définitions de membres, la recherche de nom non qualifié ne s'étend pas aux classes de base qui dépendent des paramètres du modèle. Cela signifie qu'un accès non qualifié aux typedefs définis dans la classe de base n'est pas autorisé dans le modèle de classe dérivée.

Pour résoudre ce problème, le nom complet du typedef doit être utilisé dans le modèle de classe dérivée. Ceci peut être réalisé en spécifiant explicitement la portée de la classe de base comme suit :

typename A<T>::Vec_t v;

En qualifiant explicitement le nom avec la portée de la classe de base, le compilateur peut résoudre correctement la référence au typedef Vec_t défini dans la classe de base. 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