【问题标题】:C++ : serializing a vector of class instancesC ++:序列化类实例的向量
【发布时间】:2015-05-13 16:23:18
【问题描述】:

我想将类实例的向量保存到一个文件中,以便以后能够加载它们。

这是类的样子(大致):

class outer{
    public:
        int a;
        class inner{
            public:
                int a;
                inner(int a){
                     this->a = a;
                }
        };

        vector<inner> all_inners;
        outer(int a){
            this->a = a;
            all_inners.push_back(inner(this->a+1));
        }
};

outer 类实例的向量,以及如何填充它:

vector<outer> all_outers;
int i;
void some_function(){
    for(i=0; i<5;i++)
        all_outers.push_back(outer(i));
}

我想将all_outers 向量序列化到一个文件中,当我读回它时,我希望类实例(包括内部类实例)的状态与写入时完全相同到文件。
这样的事情可能吗?

【问题讨论】:

  • 如果说serialize,是要保存文本格式,还是二进制数据?前者可以通过覆盖 std::ostream operator&lt;&lt;()std::istream operator&gt;&gt;() 来处理,专门为您的班级服务。
  • 我想要二进制格式..

标签: c++ serialization vector


【解决方案1】:

您可以编写外层尺寸,然后使用以下函数编写每个外层。之后,您可以使用读取功能读取每个外部背面。

void write(ostream& os, outer a)
{
  os.write((const char*)a.a(), sizeof(int));
  // write inners size
  os.write((const char*)a.all_inners.size(), sizeof(size_t));
  for(const inner& in : a.all_inners)
  {
    os.write((const char*)in.a, sizeof(int));
  }
}

void read(istream& is, outer& a)
{
  is.read((char*)a.a, sizeof(int));
  size_t size;
  is.read((char*)size, sizeof(size_t));
  a.all_inners.resize(size);
  for(int i = 0; i < size; i++)
  {
    int value;
    is.read((char*)value, sizeof(int));
    a.all_inners[i].a = value;
  }
}

【讨论】:

    猜你喜欢
    • 2016-02-09
    • 1970-01-01
    • 2015-02-25
    • 2017-12-19
    • 2021-07-22
    • 1970-01-01
    • 2015-05-29
    • 2012-02-29
    • 1970-01-01
    相关资源
    最近更新 更多