未调用序列化函数

Posted

技术标签:

【中文标题】未调用序列化函数【英文标题】:Serialize function is not called 【发布时间】:2015-03-03 10:15:18 【问题描述】:

我正在尝试调试使用 Boost 序列化实现的保存/加载功能,但它不起作用。我发现问题是由类瓷砖引起的:

class tile : public game_object 
...
friend class boost::serialization::access;
template <class Archive>
void serialization(Archive ar &, const unsigned int version) 

    throw new std::exception;    //I expect this will be thrown when serializing, but it isn't
    ar & boost::serialization::base_object<game_object>(*this);
    ...

保存到存档:

boost::archive::text_oarchive archive(...);
tile t = ...;
archive << t;

从存档加载:

boost::archive::text_iarchive archive(...);
tile t;
archive >> t;

问题是,不在类 game_object 中的类 tile 的数据成员没有被保存和加载。从不调用函数 tile::serialize,但调用函数 game_object::serialize。

感谢您的帮助,对不起我的英语。

【问题讨论】:

你怎么知道它没有被抛出?你抓到std::exception*了吗?因为在throw中使用new是很奇怪的c++ 不,我没有捕捉到任何东西,但我认为它会终止程序。但例外并不重要。关键是 tile::serialize 中的代码没有被执行。我知道这一点,因为我也有日志记录到未执行的文件和未触发的断点。 我知道这就是重点。我只是在检查事实,因为您的问题细节很少。你为什么不创建一个SSCCE?我们也许可以为您解决它...(再说一遍,浏览现有答案应该会为您提供此信息) 【参考方案1】:

我发现了问题。序列化的方法应该叫“serialize”而不是“serialization”。

【讨论】:

好地方。我记得曾经做过类似的事情。基类序列化启动很棘手(因此没有错误结果)。有了 SSCCE,我就不会错过了 :)

以上是关于未调用序列化函数的主要内容,如果未能解决你的问题,请参考以下文章

增强序列化:未调用 save_construct_data

护照反序列化用户未在帆中调用

调用WebService方法,报错:无法序列化 DataTable。未设置 DataTable 名称。

反序列化 Web.API 参数时未调用自定义 Json.NET JsonConverter

状态 400 和反序列化对象列表时出错。未找到默认构造函数

AppDomain CreateInstanceAndUnwrap:类型未标记为可序列化