Разумным способом сериализации пользовательских объектов является перегрузка собственного оператора выходного потока:
std::ostream & operator<<(std::ostream & o, const a & x)
{
o.write(reinterpret_cast<char*>(&x.x), sizeof(int));
o.write(reinterpret_cast<char*>(&x.f), sizeof(float));
/* ... */
return o;
}
a x;
std::ofstream ofile("myfile.bin", std::ios::binary | std::ios::app);
ofile << a;
Это все еще зависит от платформы, поэтому, чтобы быть немного более безопасным, вам, вероятно, следует использовать данные фиксированной ширинытипы типа int32_t
и т. д.
Возможно, семантически не самая лучшая идея семантически использовать <<
для двоичного вывода, поскольку он часто используется для вывода в формате .Возможно, более безопасный метод - написать функцию void serialize(const a &, std::ostream &);