【问题标题】:serializing classes using boost serialization without changing the class使用 boost 序列化序列化类而不更改类
【发布时间】:2014-03-24 10:34:03
【问题描述】:

每次我们创建一个类时都必须编写这段代码,即从 template<class archive>ar & BOOST_SERIALIZATION_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; 
    } 

}; 

【问题讨论】:

标签: c++ boost


【解决方案1】:

我建议你从文档开始:)

当您包含相关标头时,STL 容器是可序列化的:

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

开箱即用地支持许多其他东西。

可以为已经通过其他方式(例如 Fusion Sequences、Qt QObjects 等)“可反射”的类型制作通用包装器

【讨论】:

  • 我知道我们有头文件要包含在其中,但是它们实际上是如何链接它们的,即,它们显然不会更改 header 中的代码以假设 std::vector。那么他们实际上是如何在 boost 序列化和向量的标头之间创建链接的,即 boost/serialization/vector.hpp ???????
  • @shivi 我不知道你想知道什么,样本中没有涵盖。你可以——也许——找到一个更直接的例子here。仅包含标头就可以编译 OP 的代码
  • 嗯。也许您想知道serialize() 是如何知道它正在处理向量的?好吧,这就是简单的重载解决方案:foo(int); template&lt;typename...T&gt; foo(std::vector&lt;T...&gt; const&amp;); 将自动为 foo(42)foo(my_vector) 调用正确的重载
猜你喜欢
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 2014-06-07
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多