Maison > Article > développement back-end > Pourquoi les membres statiques des classes de modèles de base sont-ils inaccessibles dans les classes dérivées ?
Visibilité des identifiants de classe de modèle de base dans la classe de modèle dérivée
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(); };
Quand compilé avec GCC g 3.4.4 (cygwin), cette compilation de code échoue car NO_ZEROFILL n'est pas visible par la classe de modèle Derived. Ce comportement peut être attribué à une recherche en deux phases en C .
Recherche en deux phases en C
Lorsque le compilateur rencontre une déclaration de modèle, il effectue uniquement une vérification préliminaire recherche des identifiants utilisés dans ce modèle. Étant donné que le type réel de T n'est pas déterminé à ce stade, le compilateur ne peut pas résoudre les identifiants qui dépendent de ce type, tels que Base
Dans le processus de recherche en deux phases :
Dans ce cas, NO_ZEROFILL n'est pas visible lors de la recherche préliminaire car il dépend du type inconnu T. Par conséquent, vous devez spécifier explicitement Base
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!