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 :

boost::serialize && boost::ptr_vector


Sujet :

Boost C++

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut boost::serialize && boost::ptr_vector
    Bonjour,

    Comment puis je sérialiser un membre d'une classe de type ptr_vector<..> ?

    il semble que boost::serialize ne prends pas ce type en charge.

    Merci.

  2. #2
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Bonjour,
    Si la sérialisation du ptr_vector n'est pas intégrée de base, il suffit de la développer.
    Ça devrais ressembler a quelque chose comme ca:

    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
     
    namespace boost { 
    namespace serialization {
     
    template<class Archive, class U, class CloneAllocator, class Allocator>
    inline void save(
        Archive & ar,
        const boost::ptr_vector<U, CloneAllocator, Allocator> &t,
        const unsigned int /* file_version */
    ){
      ar << t.size();
      BOOST_FOREACH(const U &cell, t)
        ar << &cell;
    }
     
    template<class Archive, class U, class CloneAllocator, class Allocator>
    inline void load(
        Archive & ar,
        const boost::ptr_vector<U, CloneAllocator, Allocator> &t,
        const unsigned int /* file_version */
    ){
      t.clear();
      size_t size;
      ar >> size;
      for(size_t i = 0; i < size; ++i)
      {
        U *ptr = NULL;
        ar >> ptr;
        t.push_back(ptr);
      }
    }
     
    template<class Archive, class U, class CloneAllocator, class Allocator>
    inline void serialize(
        Archive & ar,
        boost::ptr_vector<U, CloneAllocator, Allocator> & t,
        const unsigned int file_version
    ){
        boost::serialization::split_free(ar, t, file_version);
    }
     
    } // serialization
    } // namespace boost
    Attention, code pas testé du tout.
    Évidement, il faut que le type contenue pas le ptr_vector soit lui même serialisable.

  3. #3
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Citation Envoyé par guillaume07 Voir le message
    il semble que boost::serialize ne prends pas ce type en charge.
    Euu si, depuis plusieurs années maintenant...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 318
    Par défaut
    il faut rajouter cette include:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <boost/serialization/vector.hpp>
    et que, ce que tu mets dans ton vector sois serializable.

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    pourquoi ai-je ce message alors :

    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
     
    #include <boost/archive/text_oarchive.hpp>
    #include <boost/archive/text_iarchive.hpp>
    #include <boost/ptr_container/ptr_vector.hpp>
     
    struct ListePortefeuille
    {    
    public:
        boost::recursive_mutex mutex_;    
        static ListePortefeuille& pInstance();
     
    private:  
        boost::ptr_vector<Portefeuille>                    vecPtf_;  
     
    private: 
     
        friend class boost::serialization::access; 
     
        template<class Archive>
        void serialize(Archive & ar, const unsigned int version)
        {
            ar & vecPtf_;    
        }
     
     
    1>C:\Program Files\boost\boost_1_36_0\boost/serialization/access.hpp(109) : error C2039: 'serialize' : is not a member of 'boost::ptr_vector<T>'

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    #include <boost/ptr_container/serialize_ptr_vector.hpp>

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/08/2007, 21h05
  2. Boost::Serialize
    Par Rodrigue dans le forum Bibliothèques
    Réponses: 19
    Dernier message: 26/07/2007, 16h09
  3. Librairie boost::serialization + vector : possible ?
    Par zax-tfh dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 07/01/2006, 14h15
  4. boost::serialize
    Par Fry dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 05/11/2004, 18h03

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