C ++ Boost向量矩阵的序列化

时间:2017-03-26 21:42:03

标签: c++ matrix serialization vector boost

我正在使用<boost/serializaton>,我需要序列化一个矢量矩阵,类X1的成员,说:

vector<vector<vector<vector<X2>>>> V;

其中:

  • 由X1的构造函数初始化为V [N] [M] [S]。
  • X2是一个类,拥有一些成员和getter / setter,有自己的serialize()函数(序列化两个std :: strings),它也由X1的constr初始化。

问题是:如何序列化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;
                        }
                    }
                }
            }
        }
    //…
    }; 

我尝试后者(也许我应该反过来?)也使用范围,以及其他不同的方式,老实说我已经删除但不记得:它序列化但在从序列化文件中读取时崩溃。 我希望能够清楚地表达自己,这是我的第一个问题。 谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

内置了矢量支持,所以

template<class Archive>
    void serialize(Archive& ar, const unsigned int version) {
        ar & V;
    }

是数据结构的正确之处。