Éviter l'invisibilité des membres publics et la répétition du code source avec les modèles de classe hérités
Dans la programmation orientée objet, l'héritage permet aux classes d'hériter de propriétés et de méthodes de leurs classes parentales. Cependant, lorsque des modèles de classe sont introduits, les membres publics peuvent devenir inaccessibles aux classes dérivées en raison de la stricte conformité à la norme C. Ce problème peut entraîner des problèmes lors de la tentative de référencement de membres publics dans des classes dérivées.
Quatre solutions existantes à ce problème ont été suggérées :
Bien que ces solutions puissent résoudre le problème d'accessibilité, elles présentent des inconvénients potentiels, tels qu'un code verbeux, des appels virtuels supprimés et la non-portabilité.
Solution améliorée proposée
Pour améliorer les solutions existantes, il est possible d'exploiter des macros pour simplifier la solution n°3 :
<code class="c++">#include <boost/preprocessor.hpp> #define USING_ONE(r, base, member) \ using base::member; #define USING_ALL(base, ...) \ BOOST_PP_SEQ_FOR_EACH(\ USING_ONE, base, \ BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \ ) // Near CBase<BYTES> #define USING_CBASE(param) USING_ALL(CBase<param>, Arr, Fn1, Fn2, Fn3, Fn4, Fn5) // In CDerived<BYTES>, in a `public:` section USING_CBASE(BYTES);</code>
Cette approche nécessite l'ajout une macro USING_CBASE proche de la définition de CBase
Cette solution répond aux préoccupations de la solution n°3, telles que le code répétitif, en encapsulant les instructions using dans des macros. Il maintient également la portabilité en se conformant aux normes C. Cette solution améliorée offre un moyen plus concis et efficace d'éviter l'invisibilité des membres publics et la répétition du code source dans les modèles de classe hérités.
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!