C++ 使用boost序列化序列化而不更改类

C++ 使用boost序列化序列化而不更改类,c++,boost,C++,Boost,每次我们创建一个类,即从template到ar&BOOST\u SERIALIZATION\u NVP(b),都必须编写这段代码。我们怎样才能把它缩短? 我们如何序列化stl容器 class Employee { private: friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar,

每次我们创建一个类,即从
template
ar
&
BOOST\u SERIALIZATION\u NVP(b)
,都必须编写这段代码。我们怎样才能把它缩短? 我们如何序列化stl容器

 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; 
    } 

}; 
class员工
{ 
私人:
好友类boost::serialization::access;
模板无效序列化(存档和应收账款),
常量(无符号整数版本)
{  
ar&BOOST_序列化_NVP(a);
ar&BOOST\U序列化\U NVP(b);
}  
INTA;
int b;
公众:
雇员(内部a、内部b)
{ 
这->a=a;
这->b=b;
} 
}; 

我建议您从文档开始:)

  • (从可序列化概念开始)
当包含相关标头时,STL容器是可序列化的:

#include <boost/serialization/map.hpp>
#include <boost/serialization/string.hpp>
#包括
#包括
许多其他东西都是开箱即用的


您可以为已经通过其他方式(例如,融合序列、Qt QObject等)变得“可反射”的类型制作通用包装。

这可能是重复的,我知道我们有头文件要包含在其中,但它们实际上是如何在它们之间链接的,也就是说,它们显然不会改变std::vector头中的代码。所以他们实际上是如何在boost序列化和vector头之间创建链接的,即boost/serialization/vector.hpp?????@shivi我不知道你想知道什么,这在示例中没有涉及。也许你可以找到一个更直接的例子。只需包含头,OP的代码就可以编译。也许您想知道
serialize()
如何知道它正在处理向量?这就是简单的重载解析:
foo(int);模板foo(std::vector const&)
将自动调用
foo(42)
vs.
foo(myu向量)