我试图了解序列化/反序列化如何在不使用库的情况下在 C++ 中工作。我从简单的对象开始,但是当反序列化一个向量时,我发现,如果没有先写下它的大小,我就无法获得向量。此外,我不知道应该选择哪种文件格式,因为如果在矢量大小之前存在数字,我将无法正确阅读。此外,我想用类和地图容器来做到这一点。我的任务是序列化/反序列化这样的对象:
PersonInfo
{
unsigned int age_;
string name_;
enum { undef, man, woman } sex_;
}
Person : PersonInfo
{
vector<Person> children_;
map<string, PersonInfo> addrBook_;
}
目前我知道如何序列化这样的简单对象:
vector<PersonInfo> vecPersonInfo;
vecPersonInfo.push_back(*personInfo);
vecPersonInfo.push_back(*oneMorePersonInfo);
ofstream file("file", ios::out | ios::binary);
if (!file) {
cout<<"can not open file";
} else {
vector<PersonInfo>::const_iterator iterator = vecPersonInfo.begin();
for (; iterator != vecPersonInfo.end(); iterator++) {
file<<*iterator;
}
您能否建议,我该如何为这个复杂的对象执行此操作,或者一个可以清楚解释它的好教程?