Je cherchais un moyen de sauvegarder/charger des donn�es de mon projet, et je suis tomb� sur boost::serialization qui avait l'air pas mal sur le papier.
Sur le papier, parce qu'il semble qu'il ne supporte pas les std::unique_ptr, et j'ai moyennement envie de faire passer tout mon projet aux pointeurs nus (quoique parfois j'h�site, vues les gal�res que les unique_ptr m'infligent...le souci c'est que je pr�f�re diminuer le risque de fuites m�moires, surtout si quelqu'un d�cide de contribuer...)...
Vu que je n'ai jamais utilis� boost::serialization avant et que je doute franchement d'avoir tout compris par rapport � son usage, je me demande si ce n'est pas plut�t moi qui ai merd� quelque part. (A moins que le probl�me ne vienne d'une mauvaise utilisation de std::unique_ptr... �a ne m'�tonnerait pas outre mesure non plus.)
Le probl�me viens du fait que le constructeur par copie est appel� par boost::interface_iarchive::operator>>(...) . J'aurai pu simplement lui passer un pointeur brut issu de mon unique_ptr, sauf que celui-ci est en fait poss�d� par un vector et qu'une telle op�ration impliquerais d'it�rer sur le vecteur, hors, j'ai cru comprendre que boost �tait capable de le faire lui-m�me.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12 void LoadTextFile::installEventManager(RenderWindow & target) throw() { ... ... ... std::string filename(openFile.GetPath()); std::ifstream ifs(filename); boost::archive::text_iarchive ia(ifs); ia >> static_cast<Group&>(target);// génère l'erreur, bien qu'elle ne soit pas vraiment causée par cette ligne //target contiens un std::vector<std::unique_ptr<Object>> qui doit être sérializé et qui cause le problème }Si quelqu'un � une id�e de comment r�soudre ce probl�me, je suis preneur... Ou m�me si quelqu'un me dis que boost en est incapable. Si c'est le cas, je ferais une solution "maison" m�me si je pr�f�re �viter de r�inventer la roue :/
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 ... #include <boost/serialization/vector.hpp> ... class Group : public Object { ... ... ... private: template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & m_children; } public: protected: std::vector<std::unique_ptr<Object>> m_children; }
Partager