我想将类实例的向量保存到文件中,以便稍后加载它们。
这就是这个课程的样子(大致):
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
向量序列化为一个文件,当我再读回来时,我希望将类实例(包括内部类实例)的状态完全相同这是写入文件时。
这样的事情可能吗?
答案 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;
}
}