Accès aux variables héritées de la classe parent modèle
L'extrait de code fourni illustre un scénario dans lequel la classe héritée Bar tente d'accéder aux variables protégées de son classe parent Foo, qui est une classe basée sur un modèle. Cependant, le compilateur génère des erreurs, ce qui entraîne une confusion quant à savoir si le compilateur adhère à la norme.
Selon la norme C, les noms non qualifiés dans un modèle sont considérés comme non dépendants et doivent être résolus lorsque le modèle est défini. . Étant donné que les modèles de classe de base spécialisés peuvent ne pas être disponibles lors de la définition du modèle, les noms non qualifiés non résolus entraînent des erreurs.
Cela s'applique à la fois aux variables et aux fonctions déclarées dans la classe de base, comme le montre l'exemple où Bar peut accéder a en utilisant des noms qualifiés ou en utilisant des déclarations. Ce dernier permet un accès non qualifié au sein de la classe dérivée, résolvant ainsi l'erreur initiale.
Par exemple, les modifications de code suivantes résolvent le problème :
template<class T> int Bar<T>::Perna(int u) { int c = Foo<T>::a * 4; // Qualified name c = this->a * 4; // Pointer to own instance using Foo<T>::a; c = a * 4; // Using declaration }
En clarifiant les règles de recherche et en proposant des solutions alternatives , cette explication souligne les nuances de la résolution des modèles et aide les développeurs à comprendre la justification du comportement du compilateur.
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!