только что проголосовали AzPs ответить как ответ, проверка Boost в первую очередь это путь.
дополнительно о вашем примере кода:
1 - изменение подписивашей функции сериализации в метод, принимающий файл:
void MyStruct::serialize(FILE* file) // or stream
{
int size = sizeof(this);
fwrite(&size, sizeof(int), 1, file); // write size
fwrite(this, 1, size, file); // write raw bytes of struct
}
уменьшает необходимость копирования структуры.
2 - да, ваш код делает сериализованные байтызависит от вашей платформы, настроек компилятора и компилятора.это не хорошо или плохо, если один и тот же двоичный файл записывает и читает сериализованные байты, это может быть полезным из-за простоты и производительности.Но это не только порядковый номер, а также упаковка и структура структуры влияет на совместимость.Например, 32-битная или 64-битная версия вашего приложения наверняка изменит макет нашей структуры.И, наконец, сериализация необработанного отпечатка также сериализует байты заполнения - байты, которые компилятор может поместить между полями структуры, что нежелательно для служебных потоков сети с высоким трафиком (см. Буферы протокола Google, так как они ищут каждый бит, который могут сохранить).:
я вижу, вы добавили "встроенный".да, тогда такие простые методы сериализации / десериализации (зеркальная реализация вышеописанной сериализации) могут быть хорошим и простым выбором.