Maison > Article > développement back-end > Pourquoi les membres de la classe publique sont-ils invisibles lors de l’héritage de classes C basées sur un modèle ?
Héritage de la visibilité des membres de classe protégés et publics dans les classes C modélisées
Le problème de la visibilité des membres publics dans l'héritage devient apparent lorsqu'un modèle de classe hérite membres d’un autre modèle de classe, comme illustré dans le code fourni. Sans redéclarer ou redéfinir explicitement les membres publics, CDerived hérite de tous les membres publics de CBase.
Problème et solutions
La modélisation de ce code révèle cependant que les membres publics de CBase devenir invisible pour CDerived sur les compilateurs adhérant au dernier standard C. Ce problème de visibilité peut être résolu à l'aide de plusieurs solutions :
Inconvénients des solutions existantes
Bien qu'efficaces, ces solutions ont leurs inconvénients :
Une solution moins verbeuse
L'introduction de macros simplifie la solution n°3, réduisant ainsi la saisie répétitive :
<code class="cpp">#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> USING_CBASE(BYTES);</code>
Ce code simplifie considérablement les instructions using, améliorant la lisibilité du code et réduisant les modifications répétitives.
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!