C++ 促进向量矩阵的序列化

C++ Boost serialization of a matrix of vectors

本文关键字:序列化 向量 C++      更新时间:2023-10-16

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

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

哪里:

    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;
                        }
                    }
                }
            }
        }
    //…
    }; 

尝试了后者(也许我应该反向这样做?(也使用范围和其他不同的方式,老实说我已经删除并且不记得了:它序列化但在从序列化文件读取时崩溃。我希望已经清楚地表达了自己,这是我的第一个问题。感谢您的帮助!

内置矢量支持,所以

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

对于数据结构来说是正确的。