jav*_*974 10 c++ serialization boost export
我在我正在做的应用程序中遇到问题.我需要使用boost序列化序列化一些数据包.根据文档,可以使用BOOST_CLASS_EXPORT_KEY和BOOST_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应该是这样的:
BOOST_CLASS_EXPORT_KEY(mynamespace::myclass)而在cpp:
BOOST_CLASS_EXPORT_IMPLEMENT(mynamespace::myclass)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存档.
希望它有一天会帮助某人(这显然是在增强文档中写的,但我必须错过它直到今天...)
| 归档时间: |
|
| 查看次数: |
2626 次 |
| 最近记录: |