2015-03-03 44 views
0

我试图调试使用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 :: serialize从不被调用,但函数game_object :: serialize被调用。

感谢您的帮助和对我的英语感到抱歉。

+0

你怎么知道它不被抛出?你抓到了'std :: exception *'吗?因为在'throw'中使用'new'非常奇怪C++ – sehe 2015-03-03 10:34:51

+0

不,我没有收到任何东西,但我认为它会终止程序。但这个例外并不重要。关键是,tile :: serialize中的代码不会被执行。而且我知道这一点,因为我也有记录到文件,这是没有执行和断点,这是没有触发。 – user1361164 2015-03-03 11:13:06

+0

我知道这一点。我只是检查事实,因为你的问题在细节上很低。你为什么不创建一个SSCCE?我们可能能够为您解决它...(然后,浏览现有的答案应该会给你这个信息) – sehe 2015-03-03 11:22:22

回答

1

我发现了这个问题。序列化的方法应该被称为“序列化”而不是“序列化”。

+0

好点。我记得曾经做过类似的事情。基类序列化踢得很难(所以没有错误结果)。与SSCCE,我不会错过它:) – sehe 2015-03-03 13:57:15