【问题标题】:boost serialization polymorphic issuesboost 序列化多态问题
【发布时间】:2012-04-30 05:05:12
【问题描述】:

多态类的Boost序列化似乎不起作用(1.40+ boost),例如使用以下代码,我相信我遵循了规则:导出类和 我在 gcc4.4 (ubuntu) 和 windows VS2010 (with boost 1.48) 上都试过: 在下面的程序中,我希望同时打印 10 和 100,但它只打印 10,这意味着它只序列化了基类;

我主要从 boost 的文档中复制了示例,但它仍然不起作用;有人知道吗? 多谢 LS

#include <iostream>
#include <sstream>
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/export.hpp>
#define NVP(X) X

class base {
public:
friend class boost::serialization::access;
base (){ v1 = 10;}
int v1;
template<class Archive>
void serialize(Archive & ar, const unsigned int file_version)
{
    ar & NVP(v1);
}
};


class derived : public base {
public:
friend class boost::serialization::access;
int v2 ;
derived() { v2 = 100;}
template<class Archive>
void serialize(Archive & ar, const unsigned int file_version){
    boost::serialization::base_object<base>(* this);
    ar & NVP(v2);
}
};
BOOST_CLASS_EXPORT(base);
BOOST_CLASS_EXPORT_GUID(derived, "derived");


int main ( ) 
{
std::stringstream ss;
boost::archive::text_oarchive ar(ss);
base *b = new derived();
ar << NVP(b);
std::cout << ss.str();
}

【问题讨论】:

    标签: c++ serialization boost polymorphism boost-serialization


    【解决方案1】:

    你忘了

    virtual ~base() {}
    

    这不仅是多态序列化工作所必需的(没有它,你的类是不是多态的),但我认为在 48 个州省略它是一种轻罪。 IANAL,所以 YMMV。

    哦,应该是ar &amp; boost::serialization::base_object&lt;...&gt;

    【讨论】:

    • 我什至不知道这是否是这个问题的正确答案,但 +1 表示有趣
    猜你喜欢
    • 2020-10-27
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 2011-04-05
    • 2020-01-15
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多