Éviter l'invisibilité des membres et la surcharge du code source avec les modèles de classe hérités
Le problème rencontré se produit lorsqu'un modèle de classe, CDerived, hérite d'une base le modèle de classe, CBase et tous les membres publics de CBase deviennent invisibles pour CDerived lorsque le code est compilé avec la conformité standard C activée.
Solutions au problème :
Solution n°1 : Qualification explicite
Références de préfixe aux membres CBase dans CDerived avec CBase
Solution n°2 : this-> Prefix
Références de préfixe aux membres CBase avec this->, par exemple, Fn1() devient this->Fn1(). Cela rend également les membres visibles, mais nécessite encore une fois des modifications détaillées du code.
Solution n°3 : Utiliser des instructions
Ajouter des instructions using dans CDerived pour importer des membres CBase, par exemple, en utilisant CBase
Solution n°4 : mode permissif non standard
Désactivez la conformité C stricte dans les paramètres du compilateur pour supprimer le problème de recherche de nom. Il s’agit cependant d’une solution globale qui s’éloigne du standard et n’est pas portable.
Une Solution Plus Concise #5 :
Pour réduire la verbosité de la Solution # 3, les macros peuvent être utilisées pour générer les instructions using nécessaires.
Mise en œuvre :
Incluez la bibliothèque de préprocesseur Boost et définissez une macro, USING_ONE, pour générer une seule using instruction pour un membre de base spécifique.
Définissez une autre macro, USING_ALL, pour générer une séquence d'instructions using pour tous les membres de base spécifiés.
Dans le modèle de classe de base, définissez une macro, USING_CBASE, pour générer les instructions using pour tous les membres protégés et publics qui seront utilisés dans les modèles de classe dérivée.
Dans le modèle de classe dérivée, utilisez la macro USING_CBASE appropriée pour importer les membres nécessaires à l'aide des macros définies précédemment. Ce processus nécessite un minimum de recherche et de saisie, réduisant ainsi la surcharge du code source tout en conservant la portabilité.
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!