Sto cercando di implementare un oggetto piuttosto grande che implementa molte interfacce. Alcune di queste interfacce sono pure virtuali. Potrei avere un problema nell'ereditarietà del diamante. Visual Studio sta segnalando un avviso di C4250 ('class1' : inherits 'class2::member' via dominance)
. Prima di tutto queste classi sono ereditate virtualmente come dovrebbe essere. Di seguito è riportato il progetto di classe parziale che causa questo problema.Ereditarietà C++ tramite avviso di posizione dominante
In questo intero albero solo D implementa metodi virtuali, non esiste altra definizione del metodo in questione. E tutti i metodi virtuali di B sono elencati negli avvisi. Se importante, D è una classe completa.
Ho letto questo succede con la serializzazione Boost ed è sicuro ignorare l'avviso.
È questo metodo che sto cercando di ottenere valido? È sicuro ignorare questo avvertimento?
Nota 1: Questo non è un duplicato di Visual Studio Compiler warning C4250 ('class1' : inherits 'class2::member' via dominance), ho provato la soluzione proposta lì.
Nota 2: Posso anche inviare diagrammi di classe, ma è un po 'più complicato di questo.
EDIT: avvertimento completa è la seguente:
warning C4250: 'gge::resource::ImageResource' : inherits
'gge::graphics::ImageTexture::gge::graphics::ImageTexture::drawin'
via dominance
gge::resource::ImageResource
è grande nel disegno, gge::graphics::ImageTexture
è D, drawin è uno dei sei metodi vengo avvertimento per.
L'implementazione di molte interfacce è un segnale che la tua classe potrebbe avere troppe responsabilità. Considerare il refactoring in diverse classi più piccole. – hammar
@hammar: Ho provato ma il problema non riguarda la classe, Big è solo un'immagine ma ci sono molte interfacce per supportare molti tipi diversi di grafica. Le funzioni che richiedono i servizi di un'interfaccia specifica dovrebbero utilizzare l'interfaccia più piccola che soddisfi le loro esigenze. Come esempio, usando queste proprietà, posso sostituire un sistema di particelle come un puntatore del mouse. In breve, non potevo entrare in classi più piccole. –
Considerare il modello di decorazione (http://en.wikipedia.org/wiki/Decorator_pattern) come alternativa alla sottoclasse. –