2017-05-28 1 views
0

Je suis novice en C++, je ne trouve pas d'exemple détaillé sur la façon de sérialiser un objet en binaire, donc je peux l'enregistrer sur le serveur mysql et ensuite être désérialisé.Sérialiser et désérialiser des objets en C++

L'objet ressemble à ceci:

class house{ 
     public: 
      int houseNumber; 
      bool isEmpty; 
      Dweller *dweller; 
}; 
    class Dweller{ 
     public: 
     int phoneNumber; 
     bool man; 
     Backpack backpack; 
}; 
    class Backpack{ 
     public: 
     int item1; 
     int item2; 
     int item3; 
     int item4; 
     float weight; 
     bool empty; 
}; 

je dois sérialiser l'objet maison, qui possède les autres objets.

+0

N'importe quel type de format binaire? Un protobuf est-il une option? https://developers.google.com/protocol-buffers/docs/overview – Anton

+0

Je pense que protobuf serait une option –

Répondre

0

j'ai pu résoudre le problème en utilisant:

#include <boost/serialization/serialization.hpp> 
#include <boost/serialization/vector.hpp> 

Voir je #include "boost/serialization/vector.hpp" parce que maintenant le « citadin » sont dans un vecteur pour rendre les choses plus faciles

Ensuite, le code est resté comme ceci:

class house{ 
    public: 
     int houseNumber; 
     bool isEmpty; 
     std::vector<Dweller> dweller; 
    private: 
     friend class boost::serialization::access; 
     template <class archive> 
     void serialize(archive &ar, const unsigned int version) 
     { 
     ar &houseNumber; 
     ar &isEmpty; 
     ar &dweller; 
     } 
}; 
class Dweller{ 
    public: 
     int phoneNumber; 
     bool man; 
     Backpack backpack; 
    private: 
     friend class boost::serialization::access; 
     template <class archive> 
     void serialize(archive &ar, const unsigned int version) 
     { 
     ar &phoneNumber; 
     ar &man; 
     ar &backpack; 
     } 
}; 
class Backpack{ 
    public: 
     int item1; 
     int item2; 
     int item3; 
     int item4; 
     float weight; 
     bool empty; 
    private: 
     friend class boost::serialization::access; 
     template <class archive> 
     void serialize(archive &ar, const unsigned int version) 
     { 
     ar &item1; 
     ar &item2; 
     ar &item3; 
     ar &item4; 
     ar &weight; 
     ar &empty; 
     } 
}; 

Alors sérialiser je:

#include <iostream> 
#include <boost/archive/binary_oarchive.hpp> 
#include <boost/archive/binary_iarchive.hpp> 
#include <boost/serialization/serialization.hpp> 
#include <sstream> 

int main() 
{ 
    Backpack _backpack; 
    _backpack.item1 = 0; 
    _backpack.item1 = 1; 
    _backpack.item1 = 2; 
    _backpack.item1 = 3; 
    _backpack.item1 = 4; 
    _backpack.weight = 3.21; 
    _backpack.empty = false; 
    Dweller _dweller1; 
    _dweller.phoneNumber = 1234567; 
    _dweller.man = false; 
    _dweller.backpack = _backpack; 
    Dweller _dweller2; 
    _dweller.phoneNumber = 7654321; 
    _dweller.man = true; 
    _dweller.backpack = _backpack; 

    std::vector<Dweller> _dwellers; 
    _dwellers.push_back(_dweller1); 
    _dwellers.push_back(_dweller2); 
    house _house; 
    _house.houseNumber = 4; 
    _house.isEmpty = false; 
    _house.dweller = _dwellers; 

    /*Serializing*/ 
    std::stringstream ss; 
    boost::archive::binary_oarchive oa(ss); 
    oa << _house; 
    /*Deserializing*/ 
    boost::archive::binary_iarchive ia(ss); 
    house _house2; 
    ia >> _house2; 
}