C ++:序列化类实例的向量

时间:2015-05-13 16:23:18

标签: c++ serialization vector

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

这就是这个课程的样子(大致):

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向量序列化为一个文件,当我再读回来时,我希望将类实例(包括内部类实例)的状态完全相同这是写入文件时。
这样的事情可能吗?

1 个答案:

答案 0 :(得分:0)

您可以编写outers大小,然后使用以下函数写入每个外部。之后,您可以使用读取功能读取每个外部背面。

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