Je regarde Boost.Serialization pour la première fois, et je ne peux pas trouver une évaluation claire (ou des instructions) concernant la sérialisation d'une structure virtuelle d'héritage de diamant.Boost.Serialization fonctionnera directement avec l'héritage virtuel de diamant?
Tenir compte de la hiérarchie de classe suivante:
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; }
Quel est le bon (je l'espère, simple) façon de mettre en œuvre sérialisation au sein de toutes ces classes à l'aide Boost.Serialization?
Remarque: Il n'existe aucun pointeur ou membre de classe de référence devant être sérialisé. Notez également: Je suis heureux d'utiliser dynamic_cast<>
pour m'assurer que les pointeurs ou les références à toutes les classes de cette hiérarchie sont du type désiré, dérivé le plus: Je suis simplement préoccupé par la manière de garantir correctement et proprement que toutes les classes BASE les membres de données sont correctement sérialisés et désérialisés, avec la classe en cours de sérialisation.
Vous pouvez avoir un peu de difficulté à utiliser sérialisation parce qu'il est une classe de modèle, si vous utilisez des méthodes virtuelles: http://stackoverflow.com/questions/10490245/virtual-functions-and-template-clash –
@Ben Je crois que le problème dans la question liée concerne uniquement les classes de base * abstract * (c'est-à-dire les classes de base avec * pure * virtual functions), car ces classes ne peuvent pas être instanciées et donc impossible d'instancier le 'serialize()' fonctionner dans une telle classe. Je ne crois pas que les fonctions virtuelles impactent Boost.Serialization autrement - en fait, c'est spécifiquement des données, et des données seulement, qui est sérialisé, donc je penserais que la présence de fonctions virtuelles est, fondamentalement, sans rapport avec Boost.Serialization sauf indirectement, comme dans l'exemple dans le lien. –
@Ben Le lien suivant semble présenter une manière bien supportée d'utiliser Boost.Serialization avec des classes de base abstraites: http://stackoverflow.com/questions/1332602/how-to-serialize-derived-template-classes-with- boost-serialize –