gpt4 book ai didi

c++ - Boost 序列化/反序列化存档 "stream error"异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:50 28 4
gpt4 key购买 nike

我有以下问题..

我有一个名为 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;”中抛出“Stream error exception”另一个……好像是注册类冲突之类的……有什么想法吗?谢谢...

最佳答案

是否在派生类的serialize函数中序列化了基础数据?

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

关于c++ - Boost 序列化/反序列化存档 "stream error"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6054854/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com