Maison >développement back-end >C++ >Comment fonctionne la propagation de type « typedef » des classes de base aux classes dérivées dans les modèles C ?
En C, il est possible de définir des typedefs au sein d'une classe de base pour fournir des alias pratiques pour des tâches spécifiques. types de données. Cependant, lors de l'utilisation d'une classe de base basée sur un modèle, il est crucial de comprendre le mécanisme de propagation de ces typedefs vers les classes dérivées.
Considérons l'exemple 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; // fails - Vec_t is not recognized };
Ici, la classe de base la classe A définit un typedef nommé Vec_t pour un vecteur de type T. Dans la classe dérivée B, lorsque vous tentez d'utiliser Vec_t sans le qualifier complètement (par exemple, typename A
Ce comportement est expliqué par le standard C (14.6.2/3). Selon 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, la portée de la classe de base n'est pas examinée lors de la recherche de nom non qualifié."
Par conséquent, dans la classe dérivée B, l'identifiant non qualifié Vec_t n'est pas reconnu car le compilateur n'examine pas la portée de la classe de base pour la recherche de nom non qualifié. Pour accéder correctement au typedef, il est nécessaire de qualifier complètement le nom en utilisant la syntaxe typename A
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!