Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1851 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [boost::serialization] Serialization de classes "inconnues"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[boost::serialization] Serialization de classes "inconnues"

n°1961738
akalash47
Posté le 31-01-2010 à 13:34:17  profilanswer
 

Bonjour,
 
Je m'adresse avant tout à des personnes qui maîtrisent bien boost::serialization ou le C++.
 
La plupart des classes que j'utilise dans mon moteur sont déjà sérialisées. Jusqu'à présent je n'ai jamais eu de soucis pour exporter/importer des classes dérivées car dans le .cpp qui s'en chargeait tous leurs headers étaient inclus.
 
Maintenant c'est différent, j'ai créé une nouvelle librairie qui vient se greffer sur celle en charge de la sérialisation. Et là problème, comment faire reconnaitre mes nouvelles classes? Pour vous donner un exemple:
 
Les déclarations de classe:

Code :
  1. namespace LibBase
  2. {
  3. class Base { template <class Archive> void serialize (Archive& archive,const U32); };
  4. class A : public Base { template <class Archive> void serialize (Archive& archive,const U32); };
  5. class B : public Base { template <class Archive> void serialize (Archive& archive,const U32); };
  6. class C : public Base { template <class Archive> void serialize (Archive& archive,const U32); };
  7. };
  8. namespace LibTop
  9. {
  10. class D : public LibBase::Base { template <class Archive> void serialize (Archive& archive,const U32); };
  11. };


 
 
L'export:

Code :
  1. #include "A.h"
  2. #include "B.h"
  3. #include "C.h"
  4. //#include "D.h" pas possible
  5. namespace LibBase
  6. {
  7.   void export( const Base* base, std::fstream& file )
  8.   {
  9.    boost::archive::text_oarchive outputArchive ( file );
  10.    outputArchive << serialization::make_nvp ( "base", base );
  11.   }
  12. };


 
Est-ce que je suis obligé de remonter cette fonction "export" dans LibTop en incluant tous les headers? En fait tout le problème c'est que le paramètre "Archive" est template, mais si on le connait à l'avance ya peut-être moyen d'appeler une virtuelle?

mood
Publicité
Posté le 31-01-2010 à 13:34:17  profilanswer
 

n°1961768
Joel F
Real men use unique_ptr
Posté le 31-01-2010 à 17:17:14  profilanswer
 

Y a un passage dans la doc de serialization sur ce genre de truc.
Clairement l'idée est d'avoir un fonction export template qui se charge de sérializé sur le type concret en déferrant l'appel à operator&(Archive,T)

 

Et sinon, pour ton idée, pas besoin d'inclure tout, une forward declaration pour le prototype suffira. Le sincldue sne seront necessaire que dans le .cpp de export


Message édité par Joel F le 31-01-2010 à 17:19:32
n°1961777
akalash47
Posté le 31-01-2010 à 18:24:31  profilanswer
 

Je ne trouve pas cette info dans la doc, est-ce que tu peux me donner le lien?
Mais visiblement je dois déclarer l'id de ma classe avec BOOST_CLASS_EXPORT_GUID avant de pouvoir sauver celle-ci. Donc j'ai peur que de toute façon remonter la fonction d'export soit la seule solution.

n°1961780
Joel F
Real men use unique_ptr
Posté le 31-01-2010 à 18:34:24  profilanswer
 

Bah c'ets surtout la seule chose logique à faire.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [boost::serialization] Serialization de classes "inconnues"

 

Sujets relatifs
Classes "vues" par javac mais compilation impossibleBoost.preprocessor
BOOST_PP : concatener un caractère spécialboost::intrusive
boost::asio : trouver un port libre ?Compilation avec boost
boost time nanosecondsMéthodes et classes imbriquées
[C#] Classes génériques, réflexionDoctrine et model classes
Plus de sujets relatifs à : [boost::serialization] Serialization de classes "inconnues"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR