Maison > Article > développement back-end > Pourquoi les classes de modèles dérivées ne peuvent-elles pas accéder directement aux identifiants de classe de modèle de base ?
Pourquoi les classes de modèles dérivés perdent l'accès aux identifiants de classe de modèle de base
En C, une classe de modèle dérivée peut ne pas avoir d'accès direct aux identifiants de sa classe de modèle de base. Ce comportement, connu sous le nom de recherche en deux phases, est appliqué par la spécification C.
Considérez l'extrait de code suivant :
template <typename T> class Base { public: static const bool ZEROFILL = true; static const bool NO_ZEROFILL = false; } template <typename T> class Derived : public Base<T> { public: Derived( bool initZero = NO_ZEROFILL ); // NO_ZEROFILL is not visible ~Derived(); }
Dans cet exemple, la classe dérivée Derived ne peut pas accéder directement au Identifiant NO_ZEROFILL de sa classe de base Base. En effet, pendant la phase de définition du modèle, le compilateur ne dispose pas d'un type réel substitué à T. Par conséquent, il ne peut pas résoudre les identifiants définis dans Base
Ce comportement garantit que la signification des identifiants dans les classes modèles est bien définie même lorsque la classe est instanciée avec différents types. Chaque instanciation de Base
Pour résoudre le problème dans le code fourni, vous pouvez qualifier explicitement l'identifiant NO_ZEROFILL avec le nom de la classe de base, comme indiqué ci-dessous :
Derived( bool initZero = Base<T>::NO_ZEROFILL );
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!