Maison > développement back-end > C++ > Comment puis-je accéder aux typesdefs de classe de base dans les modèles de classe dérivés en C ?

Comment puis-je accéder aux typesdefs de classe de base dans les modèles de classe dérivés en C ?

Mary-Kate Olsen
Libérer: 2024-12-19 12:52:09
original
942 Les gens l'ont consulté

How Can I Access Base Class Typedefs in Derived Class Templates in C  ?

Typedefs de modèles pour les classes dérivées

En C, les modèles permettent de définir des classes génériques et des structures de données. Cependant, la propagation des typedefs de la base vers les classes dérivées nécessite une manipulation spécifique.

Considérez le code suivant :

template<typename T>
class A {
public:
    typedef std::vector<T> Vec_t;
};

template<typename T>
class B : public A<T> {
private:
    Vec_t v; // Error: Vec_t is not recognized
};
Copier après la connexion

Dans cet exemple, la classe A définit une typedef pour un vecteur de type T. Cependant , lorsque vous essayez d'utiliser ce typedef dans la classe dérivée B, une erreur se produit car Vec_t n'est pas reconnu dans la portée de B.

La raison car ce problème découle du traitement par la norme C de la portée de la classe de base pour les modèles. Selon la section 14.6.2/3 de la norme :

"Dans la définition d'un modèle de classe ou d'un membre d'un modèle de classe, si une classe de base du modèle de classe dépend d'un paramètre de modèle, le la portée de la classe de base n'est pas examinée lors de la recherche de nom non qualifié..."

Cela signifie que les typedefs définis dans la classe de base ne sont pas automatiquement disponibles dans la portée de la classe dérivée lors de l'utilisation de noms non qualifiés. Pour résoudre ce problème, le typedef doit être pleinement qualifié :

typename A<T>::Vec_t v;
Copier après la connexion

En utilisant le mot-clé typename suivi du nom complet du typedef, vous spécifiez explicitement que vous souhaitez utiliser le typedef de la classe de base. . Cela fonctionnera comme prévu et vous permettra d'accéder au typedef vectoriel dans la classe dérivée.

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