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
}
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;
}
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 :/