我正在尝试序列化一个派生类,其中基类没有默认构造函数。到目前为止,我正在做的是:
struct Data {
int _value;
};
class Base;
namespace boost { namespace serialization {
template<typename Archive>
void save_construct_data(Archive&, const Base*, unsigned int);
template<typename Archive>
void load_construct_data(Archive&, Base*, unsigned int);
}}
class Base {
Data& _ref;
template<typename Archive>
void serialize(Archive&, unsigned int)
{}
friend class boost::serialization::access;
//friend load/save construct data, etc.
public:
Base(Data& ref) : _ref(ref) {}
};
BOOST_CLASS_TRACKING(Base, boost::serialization::track_always);
//implementation of load/save construct data, etc
class Derived : public virtual Base {
template<typename Archive>
void serialize(Archive& ar, unsigned int)
{
//save / load construct data NOT CALLED!
ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
}
//other methods, etc
};
上面调用了 Base 的 serialize() 方法,它什么也没做!有没有办法从派生类调用 save_construct_data 或 load_construct_data 函数(不绕过序列化机制)?这个练习的重点是跟踪 Base 的内存位置。
先感谢您。