Domanda

Quando si crea una struttura di ereditarietà C ++, è necessario definire le funzioni membro esattamente lo stesso in più luoghi:

Se B è una classe base astratta, e D, E, F e tutte ereditare da B, potrebbe essere questo:

class B
{
   virtual func A( ... params ) = 0;
};

class D : public B
{
   func A( ... params );
};

/* ... etc... similar implementations for E and F */

Quindi, non v'è, ovviamente, alcuni doppioni qui. Se l'interfaccia di B è di grandi dimensioni, si può avere molti luoghi per cambiare se l'interfaccia ha bisogno di cambiare.

Un collega ha suggerito alcuni trucchi con una incorporati #includes abilmente creati, ala:

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

Questo sembra un po kludgy? È? C'è una soluzione migliore per evitare il doppio di manutenzione?

Inoltre, forse la soluzione è in realtà gli strumenti migliori per supportare il linguaggio, come Visual Assist X?

Modifica:. Si assuma le classi derivate devono avere implementazioni uniche

È stato utile?

Soluzione

In realtà, il problema più grande con la modifica di un'interfaccia di solito è tutto il codice che utilizza , non il codice che lo implementa. Se è facile da cambiare per il realizzatore, sarebbe probabilmente rendere la vita più difficile per gli utenti.

Altri suggerimenti

Questo è doloroso per cambiare un'interfaccia ampiamente utilizzato non è un bug; si tratta di una caratteristica.

  

Inoltre, forse la soluzione è in realtà gli strumenti migliori per supportare il linguaggio, come Visual Assist X?

Esattamente. Cambiando metodo di firme è un tasto funzione degli strumenti di refactoring.

Se si dispone per la loro attuazione più e più volte con un certo comportamento predefinito allora forse dovrebbero essere solo virtuali, e non virtuale pura.

Invece di usare il preprocessore per un altro modo, non dovrebbe essere usato Mi piacerebbe provare il mio editore (o IDE, se è questo quello che vuoi.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top