【发布时间】: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?我们也许可以为您解决它...(再说一遍,浏览现有答案应该会为您提供此信息)
标签: c++ serialization boost