bonjour,
j'aimerai sérialiser un objet d'une classe template qui dérive d'une classe mère template.
J'ai essayé depuis 5 jours en suivant les instructions dans les différents forums et tutos boost sans succès.
Voici, comment je procède pour la sérialisation (qui ne marche pas):

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
template<class T>
class a
{
public:
 a::a() {}
 virtual double f(T& x, T& y);
private:
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version);
}
template<class T>
template<class Archive>
void a<T>::serialize(Archive & ar, const unsigned int version)
{
    BOOST_SERIALIZATION_ASSUME_ABSTRACT(a);
}
 
/// classe derivée
 
template<class T>
class b : public a
{
public:
b::b() {}
 virtual double f(T& x, T& y);
private:
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version);
}
 
template<class T>
template<class Archive>
void b<T>::serialize(Archive & ar, const unsigned int version)
{
    typedef a<T> baseClass;
    ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(baseClass);
    ar & BOOST_SERIALIZATION_NVP(*this);
 
    //ar & boost::serialization::make_nvp("Base", boost::serialization::base_object< a<T> >(*this) ); //ne marche pas    
    //ar & boost::serialization::base_object< a<T> >(*this);
 
}
BOOST_CLASS_EXPORT_KEY(b<double>); // ne marche pas 
//BOOST_CLASS_EXPORT(b<double>); // ne marche pas
//BOOST_CLASS_EXPORT_GUID(b<double>, "idClasseB"); //ne marche pas
J'ai une erreur "multiple definition" de classe b. J'ai fait des modifications à plusieurs endroits et testé plusieurs variantes mais ça ne marche pas. Au bout de plusieurs jours, je n'arrive toujours pas à trouver mon erreur.

Merci par avance pour votre aide.