首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost序列化多态问题

boost序列化多态问题
EN

Stack Overflow用户
提问于 2012-04-30 05:05:12
回答 1查看 1.7K关注 0票数 2

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

我主要是从boost的文档中复制这个例子,但是它仍然不起作用,谁知道呢?非常感谢

代码语言:javascript
复制
#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();
}
EN

回答 1

Stack Overflow用户

发布于 2012-04-30 21:00:05

你忘了

代码语言:javascript
复制
virtual ~base() {}

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

哦,应该是ar & boost::serialization::base_object<...>

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10378733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档