Bonjour,

Je souhaite utiliser boost::serialize dans un projet mais j'ai des problèmes avec les classe template:

Je dispose d'une classe template de base:

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
 
template<class T>
class Tclass {
 
	friend class boost::serialization::access;
    template<class Archive>
    inline void serialize(Archive & ar, const unsigned int version)
    {
		ar & BOOST_SERIALIZATION_NVP(m_Value);
    }
 
public:
	T m_Value;
	Tclass(T value) { m_Value = value; }
};
et d'une autre classe template dérivant de cette classe:

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
 
template<class T>
class TclassDeriv : public Tclass<T> {
 
	friend class boost::serialization::access;
    template<class Archive>
    inline void serialize(Archive & ar, const unsigned int version)
    {
		ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Tclass<T>);
		ar & BOOST_SERIALIZATION_NVP(m_Value2);
    }
 
public:
	T m_Value2;
	TclassDeriv(T value1, T value2) : Tclass<T>(value1) { m_Value2 = value2; }
};
Je crée ensuite un élément TclassDeriv<int> dans le main et je le serialise:

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
22
23
24
25
26
27
 
#include <boost/archive/xml_woarchive.hpp> // saving
#include <boost/archive/xml_wiarchive.hpp> // loading
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/version.hpp>
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/export.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/list.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/map.hpp>
 
int main()
{
	Tclass<int> A(25);
	cout << A.m_Value << endl;
	TclassDeriv<int> Ad(0,1);
	cout << Ad.m_Value << endl;
	cout << Ad.m_Value2 << endl;
 
	std::wofstream ofs("C:\\Data\\test.xml");
        assert(ofs.good());
        boost::archive::xml_woarchive oa(ofs);
        oa << BOOST_SERIALIZATION_NVP(Ad);
 
	return 0;
}
Le code compile bien et affiche:

25
0
1

mais il plante au moment de serialiser.

Auriez vous une idée de ce qui ne va pas?