ライブラリを使用せずに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;
}
この複雑なオブジェクトまたはそれを明確に説明する優れたチュートリアルに対して、これをどのように行うことができますか?