我正在使用<boost/serializaton>
,我需要序列化一个矢量矩阵,类X1的成员,说:
vector<vector<vector<vector<X2>>>> V;
其中:
问题是:如何序列化V?
我尝试了不同的方法,但没有人工作。我已经阅读了Boost网站及其示例中的文档,但我遗漏了一些东西。 这就是事情:
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/serialization/vector.hpp>
// I tried with the simplest way:
class X1{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, const unsigned int version) {
ar & V;
}
//…
};
// or by calling serialization in a explicit way for each object of V:
class X1{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, const unsigned int version) {
ar & V;
for (auto it = V.begin(); it != V.end(); ++it) {
ar & *it;
for (auto jt = (*it).begin(); jt != (*it).end(); ++jt) {
ar & *jt;
for (auto kt = (*jt).begin(); kt != (*jt).end(); ++kt) {
ar & *kt;
for (auto wt = (*kt).begin(); wt != (*kt).end(); ++wt) {
ar & *wt;
}
}
}
}
}
//…
};
我尝试后者(也许我应该反过来?)也使用范围,以及其他不同的方式,老实说我已经删除但不记得:它序列化但在从序列化文件中读取时崩溃。 我希望能够清楚地表达自己,这是我的第一个问题。 谢谢你的帮助!
答案 0 :(得分:3)
内置了矢量支持,所以
template<class Archive>
void serialize(Archive& ar, const unsigned int version) {
ar & V;
}
是数据结构的正确之处。