Maison > développement back-end > C++ > le corps du texte

Comment éviter l'invisibilité des membres publics et la répétition du code source dans les modèles de classes hérités ?

DDD
Libérer: 2024-11-04 04:49:01
original
804 Les gens l'ont consulté

How to Avoid Public Member Invisibility and Source Code Repetition in Inherited Class Templates?

É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 :

  • Préfixer les références avec CBase
  • Préfixer les références avec this->
  • Utiliser des instructions individuelles using pour chaque membre
  • Désactivation de la conformité stricte en C

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>
Copier après la connexion

Cette approche nécessite l'ajout une macro USING_CBASE proche de la définition de CBase puis en appelant la macro dans la section publique de CDerived. Il effectue essentiellement une déclaration globale pour que tous les membres sélectionnés de CBase visible dans CDerived.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!