файл — C ++ сериализация структур данных

Я изучаю сериализации в C ++. В чем преимущество / отличие boost::serialization по сравнению с чем-то вроде:

ifstream_obj.read(reinterpret_cast<char *>(&obj), sizeof(obj)); // read
// or
ofstream_obj.write(reinterpret_cast<char *>(&obj), sizeof(obj)); // write
// ?

и какой из них лучше использовать?

2

Решение

Большие преимущества Boost Serialization:

  • на самом деле это работает для нетривиальных (POD) типов данных (C ++ не C)
  • он позволяет вам отделить код сериализации от бэкэнда архива, тем самым предоставляя вам текст, XML, двоичную сериализацию
  • Если вы используете правильный архив, вы даже можете иметь переносимость (попробуйте это с вашим образцом). Это означает, что вы можете отправлять на одном компьютере / ОС / версии и получать на другом без проблем.

Наконец, он добавляет (а) слой (и) абстракции, которые делают вещи намного менее подверженными ошибкам. Конечно, вы могли бы сделать то же самое для предложенного подхода к сериализации без особых проблем.

Вот ответ, который делает сериализацию, которую вы предлагаете, но безопасно:

Обратите внимание, что Boost Serialization полностью знает о побитовых сериализуемых типах, и вы также можете рассказать о своих собственных:

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]