提高序列化和register_type(boost serialization and regist

2019-08-01 03:43发布

我有一个应用程序,我正在做的一个问题。 我需要使用boost序列化连载一些数据包。 根据该文件,可以使用BOOST_CLASS_EXPORT_KEYBOOST_CLASS_EXPORT_IMPLEMENT分别转换成.HPP和cpp文件,以便能够使用多态基指针来序列派生的类。

因此,这里是我有:

.HPP:containaing我班宣言和finaly的BOOST_CLASS_EXPORT_KEY(mynamespace::mypacket)

的.cpp:包含我的类定义和BOOST_CLASS_EXPORT_IMPLEMENT(mynamespace::mypacket)

一切都正常运行,直到这点,但需要进行序列化时,我得到一个bad_alloc的错误。

我曾角落找寻这个问题通过显式调用方法register_type<mypacket>()上我需要用归档。

但这里是我的问题:是提振出口*旨在避免调用register_type方法还是我做错了什么? 我有种感觉就像在我的代码做两次同样的工作,但更重要的我没有看到使用导出密钥的任何优势+实施,如果我们还是之后使用register_type上存档!

我读到这里的一些其他职位和其他地方,似乎我不是实验的问题只有一个,但我还没有找到任何答案。

Answer 1:

我想通了,如何避免存档调用register_type。 对于那些谁可能会感兴趣,但需要做的模板系列化专业化以及出口键+实现。

因此,这里是你的.HPP应该是什么样子:

  • 类声明(myNameSpace对象:: MyClass的)
  • 出口类: BOOST_CLASS_EXPORT_KEY(mynamespace::myclass)

而在CPP:

  • 类definiton
  • 出口类: BOOST_CLASS_EXPORT_IMPLEMENT(mynamespace::myclass)
  • AND:你需要使用,每个类的档案连载()成员专业化:

template void mynamespace::mypacket::serialize(boost::archive::text_iarchive& arch, const unsigned int version);

template void mynamespace::mypacket::serialize(boost::archive::text_oarchive& arch, const unsigned int version);

其中的boost ::档案:: text_(I / O)档案应与任何种类的升压更换存档您正在使用。

在希望这将帮助别人一天(这是写清楚在提升文档 ,但我一定是错过了它直到今天......)



文章来源: boost serialization and register_type