Lors de la création d'une structure d'héritage de C++, vous devez définir les fonctions membres exactement la même chose à plusieurs endroits:C++: éviter la double entretien dans l'héritage des hiérarchies
Si B est une classe de base abstraite et D, E et F tous héritent de B, vous pourriez avoir ceci:
class B
{
virtual func A(... params) = 0;
};
class D : public B
{
func A(... params);
};
/* ... etc... similar implementations for E and F */
Donc, il y a évidemment une certaine duplication ici. Si l'interface vers B est grande, vous pouvez avoir beaucoup d'endroits à changer si l'interface doit changer.
Un collègue de travail a suggéré ruser avec un #includes-créé astucieusement intégrés, ala:
class D: public B
{
#include "B_Interface.h" // B_Interface.h is a specially crafted .h file
}
Cela semble un peu kludgy? Est-ce? Y a-t-il une meilleure solution pour éviter la double maintenance?
En outre, peut-être la solution ici est vraiment de meilleurs outils pour soutenir le langage, comme Visual Assist X?
Édition: Supposons que les classes dérivées doivent avoir des implémentations uniques.
La bibliothèque Boost fait cela à certaines parties, mais pas pour l'héritage, juste pour la réutilisation de code. –
Pourquoi ne pas utiliser une macro plutôt qu'une inclusion? Le point étant que '# include 'implique la recherche d'un fichier alors qu'une macro est déjà dans la table des symboles. –