【发布时间】:2015-01-13 21:36:04
【问题描述】:
我正在尝试通过使用指向基类的指针增强序列化来使派生类可序列化。
Base::serialization 调用。未调用 Derived::serialization。
我做错了什么?
#include <sstream>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/assume_abstract.hpp>
struct Base
{
int x;
Base() { x = 0; }
virtual ~Base() {}
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & x;
}
};
BOOST_SERIALIZATION_ASSUME_ABSTRACT(Base)
struct Derived : Base
{
int y;
Derived() { x = 1; y = 2; }
virtual ~Derived() {}
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & boost::serialization::base_object<Base>(*this);
ar & y;
}
};
int main()
{
Derived derived;
Base *basePtr = &derived;
std::string s;
std::stringstream ss(s);
boost::archive::binary_oarchive oa(ss);
oa << *basePtr;
}
【问题讨论】:
-
已编辑。还是不行。
-
如果说void serialize:成员函数模板不能是虚拟的。
-
确实,为了允许 RTTI,必须使所涉及的类型成为虚拟类型(请注意,Boost Any 在 boost 1.57.0 中不再需要 RTTI,也许将来这种技术也可以用于 Boost Serialization)
标签: c++ serialization boost polymorphism