2014-03-24 85 views
0

这段代码必须在我们每次创建类时写入,即从template<class archive>ar & BOOST_SERIALIZATION_NVP(b)。我们怎样才能缩短它? 以及我们如何序列化stl容器?使用boost序列化来序列化类而不更改类

class Employee 
{ 
private:  
    friend class boost::serialization::access; 
    template<class Archive> void serialize(Archive & ar, 
      const unsigned int version) 
    { 
     ar & BOOST_SERIALIZATION_NVP(a); 
     ar & BOOST_SERIALIZATION_NVP(b); 
    } 

    int a; 
    int b; 

public: 
    Employee(int a, int b) 
    { 
     this->a = a; 
     this->b = b; 
    } 

}; 
+0

的可能重复[我们可以在不同的分离主序列化方法类型的通用包装类使更容易和更简单的使用boost库C++?](http://stackoverflow.com/questions/22603039/can-we-separate-the-main-serialize-method-in-different-class-to-让它更容易a) – jfly

回答

0

我建议你先从文档:)

STL容器是序列化的,当你有相关的头(下序列化的概念开始):

#include <boost/serialization/map.hpp> 
#include <boost/serialization/string.hpp> 

开箱即用的支持其他东西。

可以让那些已经取得了“reflectible”通过其他方式(如融合序列,Qt的QObject对象等)

+0

这我知道我们有头文件包含在这个,但他们如何实际上他们之间的链接,即他们显然不会改变标题中的代码,假设std :: vector。 所以它们如何实际上创建了boost序列化和vector之间的链接,例如boost/serialization/vector.hpp ??????? – shivi

+0

@shivi我不知道你想知道什么,这不在样本中。你可以 - 也许 - 找到一个更直接的例子[这里](http://stackoverflow.com/questions/22533863/boost-serialization-of-native-type-defined-with-typedef/22533995#22533995)。只包括标题使OP的代码编译 – sehe

+0

毫米。也许你想知道'serialize()'如何知道它正在处理一个向量?那么,这是简单的重载分辨率:'foo(int); template foo(std :: vector const&);'会自动为'foo(42)'调用正确的重载''foo(my_vector)'' – sehe