2011-07-20 5 views
2

Je ne suis pas en mesure d'utiliser boost::serialization car il a des dépendances de bibliothèque donc j'essaie de trouver un moyen de le faire moi-même. Peu importe si cela signifie copier à partir de boost::serialization. Après avoir lu this answer to a similar question, j'ai jeté un oeil à boost/serialization/variant.hpp et j'ai trouvé save() fonction qui est simple et compréhensible pour moi.Comment charger un boost :: serial?

Cependant la fonction load() semble plus compliquée: Il y a une récursion impliquant load() et variant_impl<types>::load() et un paramètre which décrémenté. Donc apparemment le code itère sur chaque type de la variante afin de convertir le int which en un type. Le reste me dépasse.

Je sais que boost a beaucoup de code pour le rendre portable alors peut-être qu'il y a un moyen moins portable mais plus facile de faire cela?

Répondre

1

Si vous deviez supprimer les éléments de sérialisation d'une copie de boost/serialization/variant.hpp (à l'exception du paramètre de modèle Archive), c'est-à-dire, lancez vos propres types d'exception et modifiez, par exemple.

ar >> BOOST_SERIALIZATION_NVP(which); 
// to: 
ar >> which; 

Ensuite, il semble que vous devriez être en mesure de remplacer Archive avec std :: ostream ou std :: istream dans les fonctions de sauvegarde/chargement, respectivement.

Pas essayé, mais en un coup d'oeil, il semble que cela devrait fonctionner.

Je suppose que cela dépend de ce que vous utilisez réellement pour sérialiser les données si vous n'utilisez pas boots :: serialization?

+0

J'essaie de mettre mes données dans un objet MFC 'CArchive' ... J'ai essayé de supprimer les trucs NVP mais le' CArchive' ne semble pas être un bon ajustement pour tout cela .. – foraidt

+0

@foraidt: 'CArchive' ne fonctionne qu'avec les types qui dérivent de' CObject', ce que 'boost :: variant <>' ne fait clairement pas. – ildjarn

+0

@ildjarn 'CArchive :: operator <<()' est surchargé pour un certain nombre de types (voir http://msdn.microsoft.com/fr-fr/library/331a7zh8%28v=vs.80%29.aspx) . Cela permet de sérialiser beaucoup plus que les classes dérivées de 'CObject'. Mon but est de sérialiser non pas la 'variant' elle-même, mais les données qu'elle contient. – foraidt

Questions connexes