сериализация — Сериализация объектов C ++

Я хотел бы реализовать класс сериализации, который принимает объект и преобразует его в двоичный поток и хранится в файле. Позже объект должен быть реконструирован из файла.

Хотя эта функция предоставляется BinaryFormatter в C #, я бы хотел
собственный класс сериализации с нуля.

Может кто-то указать на некоторые ресурсы?

заранее спасибо

4

Решение

Я уже некоторое время использую библиотеку boost :: serialization и думаю, что это очень хорошо. Вам просто нужно создать код сериализации следующим образом:

class X {
private:
std::string value_;
public:
template void serialize(Archive &ar, const unsigned int version) {
ar & value_;
};
}

Нет необходимости создавать код десериализации (поэтому они использовали & оператор). Но если вы предпочитаете, вы все равно можете использовать << и >> операторы.

Также возможно написать метод сериализации для класса без изменений (например: если вам нужно сериализовать объект, который поступает из библиотеки). В этом случае вы должны сделать что-то вроде:

namespace boost { namespace serialization {
template
void serialize(Archive &ar, X &x const unsigned int version) {
ar & x.getValue();
};
}}
2

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

Я хотел бы дать вам отрицательный ответ. Это менее полезно, но все же может быть.

Я использую сериализацию в течение нескольких лет, и это была одна из величайших стратегических ошибок моей компании. Он выдает очень большой вывод, он очень медленный, он распространяет целую кучу зависимостей, что делает невозможным медленную компиляцию, а затем трудно выйти из-за существующих сериализованных форматов. Кроме того, он ведет себя по-разному на разных компиляторах, поэтому обновление с VS2005 до 2010 фактически заставило нас написать слой совместимости, что также сложно, потому что код очень сложен для понимания.

5

Вот 2 решения для сериализации C ++:

Лично у меня есть только опыт работы с 1-м и фактически использовались только текстовые сериализаторы, но я знаю, что легко определить двоичные сериализаторы для использования с s11n.

3

C ++ Middleware Writer может представлять интерес Она имеет преимущества в производительности по сравнению с библиотекой сериализации в Boost. Это также автоматизирует создание функций сериализации.

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