【发布时间】:2015-06-16 20:40:59
【问题描述】:
我正在尝试学习 boost::serialization 以制作相同的游戏系统,而我对 text_oarchive 格式的了解还很远。我学会了如何将 BOOST_CLASS_EXPORT_GUID 用于多态类,并将 BOOST_SERIALIZATION_NVP 用于 xml 档案。然后,当我尝试使用具有 xml_oarchive 归档格式的多态类来组合它们时,我遇到了运行时错误。
错误:
我的代码:
#include <fstream>
#include <boost/serialization/serialization.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/export.hpp>
struct base {
friend class boost::serialization::access;
//...
// only required when using method 1 below
// no real serialization required - specify a vestigial one
template<class Archive>
void serialize(Archive & ar, const unsigned int file_version){}
virtual ~base() { }
};
struct derived : public base {
friend class boost::serialization::access;
int i = 93894;
template<class Archive>
void serialize(Archive & ar, const unsigned int file_version){
// method 1 : invoke base class serialization
ar & BOOST_SERIALIZATION_NVP(boost::serialization::base_object<base>(*this));
ar & BOOST_SERIALIZATION_NVP(i);
}
virtual ~derived() { }
};
BOOST_CLASS_EXPORT_GUID(derived, "derived")
int main()
{
std::ofstream ofstr("file.txt");
boost::archive::xml_oarchive oarch(ofstr);
base* b = new derived();
oarch << BOOST_SERIALIZATION_NVP(b);
std::cin.get();
delete b;
}
所有这一切都以 text_oarchive 格式完美运行,但是当我将其更改为 xml_oarchive 时,它崩溃了。
我在这里做错了什么,看来我做了教程告诉我的所有事情。
【问题讨论】:
标签: c++ serialization boost xml-serialization