boost序列化和register_type

jav*_*974 10 c++ serialization boost export

我在我正在做的应用程序中遇到问题.我需要使用boost序列化序列化一些数据包.根据文档,可以使用BOOST_CLASS_EXPORT_KEYBOOST_CLASS_EXPORT_IMPLEMENT分别进入.hpp和.cpp文件,以便能够使用多态基指针来序列化派生类.

所以这就是我所拥有的:

.hpp:包含我的班级宣言和最后的 BOOST_CLASS_EXPORT_KEY(mynamespace::mypacket)

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

一切都运行正常,但是当需要序列化时,我得到一个bad_alloc错误.

我通过显式调用register_type<mypacket>()我需要使用的存档上的方法来解决这个问题.

但这是我的问题:boost的EXPORT*是否意味着避免调用register_type方法或者我做错了什么?我觉得在我的代码中做了两次相同的工作,但更多的是我没有看到使用导出密钥+实现的任何优势,如果我们仍然必须在归档后使用register_type!

我在这里和其他地方读过其他一些帖子,似乎我不是唯一一个试验这个问题的人,但我还没有找到任何答案.

jav*_*974 12

我想出了如何避免在归档时调用register_type.对于那些可能感兴趣的人,需要进行模板序列化专业化以及导出密钥+工具.

所以这是你的.hpp应该是这样的:

  • 类声明(mynamespace :: myclass)
  • 班级出口: BOOST_CLASS_EXPORT_KEY(mynamespace::myclass)

而在cpp:

  • 阶级定义
  • 班级出口: BOOST_CLASS_EXPORT_IMPLEMENT(mynamespace::myclass)
  • AND:对每个类需要使用的存档的serialize()成员特化:

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 :: archive :: text_(i/o)存档应该替换为您正在使用的任何类型的boost存档.

希望它有一天会帮助某人(这显然是在增强文档中写的,但我必须错过它直到今天...)