IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Boost C++ Discussion :

serialisation d'iterateur de liste avec Boost::serialization


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Par défaut serialisation d'iterateur de liste avec Boost::serialization
    Tout est dans le titre, j'ai une classe A avec comme membre, un vecteur de int et un itérateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class A
    {
    public:
    	vector<int> m_lstValues;
    	vector<int>::iterator m_whereIam;
    };
    je cherche à la serialiser avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    template<class Archive>
    void serialize(Archive & ar, A & a, const unsigned int version)
    {
        ar & a.m_lstValues;
        ar & a.m_whereIam;
    }
    mais lorsque j'essaie de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main()
    {
    	A a;
    	a.m_lstValues.push_back(10);
    	a.m_whereIam = a.m_lstValues.begin();
     
    	ofstream fs("test.txt");
    	boost::archive::text_oarchive oa(fs);
    	oa & a;
    	return 0;
    }
    le compilateur me sort:
    C:\Program Files\boost\boost_1_35_0\boost\serialization\access.hpp(109) : error C2039: 'serialize' : n'est pas membre de 'std::vector<_Ty>::iterator'
    avez vous déjà sérialisé un itérateur, si oui comment avez vous fait?

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 21
    Par défaut
    Je ne suis pas expert mais il me semble que boost::serialization supportent la serialisation des conteneurs de la STL mais je ne suis pas sûr que ce soit aussi le cas des itérateurs.

    Ce que tu pourrais peut-être faire:
    • Séparer la fonction serialize en fonctions load et save
    • Récupérer l'indice du conteneur pointé par ton itérateur et l'enregistrer en tant qu'entier dans la fonction save.
    • Récupérer l'indice et l'itérateur correspondant dans la fonction load.


    Par exemple:

    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
     
    #include <boost/serialization/split_free.hpp>
     
    class A
    {
    public:
        vector<int> m_lstValues;
        vector<int>::iterator m_whereIam;
        int m_Position;  // Just used to keep the iterator position for serialization
    };
     
    class A  // Really needed?
    template<class Archive>
    void save(Archive & ar, A & a, const unsigned int version)
    {
        ar & a.m_lstValues;
        a.m_Position = distance(m_lstValues, a.m_whereIam);
        ar & a.m_Position;
    }
     
    class A  // Really needed?
    template<class Archive>
    void load(Archive & ar, A & a, const unsigned int version)
    {
        ar & a.m_lstValues;
        ar & a.m_Position;
        a.m_whereIam = m_lstValues.begin() + a.m_Position;
    }
     
    BOOST_SERIALIZATION_SPLIT_FREE(A)

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    m_Position n'a pas besoin d'être membre de la classe. Un temporaire suffira.

Discussions similaires

  1. Serialisation avec Boost
    Par Lepton_42 dans le forum Boost
    Réponses: 3
    Dernier message: 27/01/2013, 13h54
  2. Serialization avec Boost
    Par EpiGodPeople dans le forum Langage
    Réponses: 4
    Dernier message: 24/05/2012, 15h26
  3. Réponses: 5
    Dernier message: 30/06/2011, 13h38
  4. Réponses: 2
    Dernier message: 30/12/2009, 20h44
  5. Serialization avec Boost : Experiences?
    Par Klaim dans le forum Boost
    Réponses: 3
    Dernier message: 03/12/2007, 21h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo