未调用序列化函数
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,我就不会错过了 :)以上是关于未调用序列化函数的主要内容,如果未能解决你的问题,请参考以下文章
调用WebService方法,报错:无法序列化 DataTable。未设置 DataTable 名称。