我有以下问题。
我有一个名为 A.h 的文件和一个名为 B.h 的文件,每个文件都包含如下结构:(两个类中的结构不同)
struct Base
{
friend class access;
template <typename Archive>
void serialize(Archive& ar,const unsigned int version)
{
ar & fieldLength;
ar & fieldMD;
ar & fieldTime_Stamp;
}
public:
unsigned int fieldLength;
unsigned int fieldMD;
unsigned int fieldTime_Stamp;
virtual void f(){} //to be polymorphic the struct
};
struct Derived:public Base
{
...
}
所以我以经典的方式序列化结构:
....
std::ostringstream archive_stream;
boost::archive::text_oarchive archive(archive_stream);
archive.register_type(static_cast<Derived*>(NULL))
archive <<p; // where p is a pointer to Base
现在的问题...在反序列化方面,我遵循相同的(反向)过程......如果我单独反序列化 A.h 中的结构(不包括在项目 B.h 中)和 B.h 中的结构(不包括在项目 A.h 中)都有效......但是如果我在项目中都包含这两个类,则反序列化适用于一个类,但在指令"archive>> m;"中为另一个类抛出"流错误异常"......似乎注册类或类似的东西发生了冲突......有什么想法吗?谢谢...
是否已序列化派生类序列化函数中的基本数据?
ar & boost::serialization::make_nvp( "base", boost::serialization::base_object< Base >( *this ) );
我不知道这是否有帮助,但我使用
BOOST_CLASS_IMPLEMENTATION(x, boost::serialization::object_serializable);
BOOST_CLASS_TRACKING(x, boost::serialization::track_never)
将类注册为可序列化。希望有帮助:3