Я пытаюсь понять, как сериализация/десериализация работает на С++ без использования библиотек. Я начал с простых объектов, но при десериализации вектора обнаружил, что не могу получить вектор, не написав предварительно его размер. Более того, я не знаю, какой формат файла мне выбрать, потому что, если цифры существуют до размера вектора, я не могу его правильно прочитать. Кроме того, я хочу сделать это с помощью классов и контейнеров карт. Моя задача — сериализовать/десериализовать такой объект:
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;
}
Не могли бы вы предложить, как я могу сделать это для этого сложного объекта или хороший учебник, который ясно объясняет это?