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

Не могли бы вы предложить, как я могу сделать это для этого сложного объекта или хороший учебник, который ясно объясняет это?

10
задан Segmentation 23 December 2017 в 00:31
поделиться