Sto osservando Boost.Serialization per la prima volta e non riesco a trovare una valutazione chiara (o istruzioni) riguardante la serializzazione di una struttura di ereditarietà virtuale del diamante.Boost.Serialization funziona direttamente con l'ereditarietà virtuale dei diamanti?
Si consideri il seguente gerarchia di classe:
class A { int a; }
class B1 : public virtual A { int b1; }
class B2 : public virtual A { int b2; }
class B3 : public virtual A { int b3; }
class C12 : public virtual B1, public virtual B2 { int c12; }
class C13 : public virtual B1, public virtual B3 { int c13; }
class C23 : public virtual B2, public virtual B3 { int c23; }
class D123 : public virtual C12, public virtual C13, public virtual C23 { int d123; }
Qual è il modo (si spera, semplice) adeguata per implementare la serializzazione all'interno di tutte queste classi utilizzando Boost.Serialization?
Nota: non ci sono puntatori o membri di classe di riferimento che devono essere serializzati. Nota: sono felice di usare dynamic_cast<>
per assicurare che qualsiasi puntatore o riferimento a qualsiasi classe in questa gerarchia sia del tipo desiderato, derivato-più: sono semplicemente preoccupato di come garantire correttamente e in modo pulito che tutte le classi BASE i membri dei dati sono correttamente serializzati e deserializzati, insieme alla classe corrente che viene serializzata.
Potrebbe essere un po 'problematico utilizzare la serializzazione perché è una classe modello, se si utilizzano metodi virtuali: http://stackoverflow.com/questions/10490245/virtual-functions-and-template-clash –
@Ben Credo che il problema nella domanda collegata riguardi le * basi * astratte * (cioè, le classi base con * pure * funzioni virtuali) solo, perché tali classi non possono essere istanziate, e quindi è impossibile istanziare il 'serialize() richiesto funzione all'interno di tale classe. Non credo che le funzioni virtuali abbiano un impatto su Boost.Serialization altrimenti - in realtà, sono specificatamente dati e solo dati, che sono serializzati, quindi penso che la presenza di funzioni virtuali sia, in sostanza, irrilevante a Boost.Serialization tranne che indirettamente, come nell'esempio nel link. –
@Ben Il seguente collegamento sembra presentare un modo ben supportato per utilizzare Boost.Serialization con classi di base astratte: http://stackoverflow.com/questions/1332602/how-to-serialize-derived-template-classes-with- boost-serialize –