Boost 1.65.1环境下直接序列化boost::array编译失败如何解决
直接序列化boost::array失败的原因
你使用的Boost 1.65.1版本中,boost::array的序列化适配逻辑没有集成在<boost/array.hpp>头文件里,而是单独抽离到了<boost/serialization/boost_array.hpp>头文件中。原代码没有引入这个序列化适配头,Boost序列化框架无法找到boost::array对应的序列化实现,才会抛出「类没有serialize成员」的编译错误。
其他解决方案
除了用boost::serialization::make_array包装外,最简便的方案就是在原代码中补充引入对应的序列化头文件,不需要修改原有序列化逻辑:
// 新增这一行头文件引入即可 #include <boost/serialization/boost_array.hpp>
修改后的完整可运行代码如下:
#include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include <boost/array.hpp> // 补充引入boost::array的序列化适配头 #include <boost/serialization/boost_array.hpp> #include <iostream> #include <sstream> using namespace boost::archive; std::stringstream ss; void save() { text_oarchive oa{ss}; boost::array<int, 3> a{{0, 1, 2}}; oa << a; } void load() { text_iarchive ia{ss}; boost::array<int, 3> a; ia >> a; std::cout << a[0] << ", " << a[1] << ", " << a[2] << '\n'; } int main() { save(); load(); }
这个方案可以保留原有的直接序列化boost::array对象的写法,不需要做其他逻辑修改。
内容的提问来源于stack exchange,提问作者Sev7
相关产品推荐
相关产品推荐

