Question

Lors de la création d'une structure d'héritage C ++, vous devez définir les fonctions membres exactement la même chose à plusieurs endroits:

Si B est une classe de base abstraite et D, E et F héritons tous 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 */

Alors, il y a évidemment une certaine duplication ici. Si l'interface B est grande, vous pouvez avoir beaucoup d'endroits pour changer si l'interface doit changer.

Un collègue de travail a suggéré ruser avec un #includes-créé astucieusement intégré, ala:

class D: public B
{
   #include "B_Interface.h"  // B_Interface.h is a specially crafted .h file
}

Cela semble un peu kludgy? Est-il? Y at-il une meilleure solution pour éviter l'entretien double?

En outre, peut-être la solution ici est des outils vraiment mieux pour soutenir la langue, comme Visual Assist X?

Edit:. Supposons que les classes dérivées doivent avoir des implémentations uniques

Était-ce utile?

La solution

En fait, le plus gros problème avec le changement d'interface est généralement tout le code utilise , pas le code qui implémente. S'il est facile de le changer pour le réalisateur, il serait probablement la vie plus difficile pour les utilisateurs.

Autres conseils

Qu'il est douloureux de changer une interface largement utilisée est pas un bug; il est une caractéristique.

  

En outre, peut-être la solution ici est des outils vraiment mieux pour soutenir la langue, comme Visual Assist X?

Exactement. Modification des signatures de méthode est une élément clé d'outils de refactoring.

Si vous devez les mettre en œuvre à plusieurs reprises avec un comportement par défaut alors peut-être qu'ils devraient juste être virtuel, et non virtuelle pure.

Au lieu d'utiliser le préprocesseur pour une autre façon il ne devrait pas être utilisé, je vais essayer mon éditeur (ou IDE, si c'est ce que vous aimez.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top