Нужна рекомендация для библиотеки сериализации объектов в c ++ - PullRequest
4 голосов
/ 20 марта 2010

Я ищу рекомендации для библиотеки сериализации / десериализации объектов в c ++? Какой из них наиболее продвинутый и с открытым исходным кодом?

Может ли он справиться

  • Какой класс определен пользователями?
  • Иерархия объектов (родительский и дочерний классы)?
  • Дерево предметов? Класс A имеет атрибут класса B, который имеет атрибут класса C?
  • STL контейнеры? Класс A имеет вектор класса B?
  • Циклические объекты? Класс A имеет указатель, указывающий на B, который имеет указатель на A?

Я нахожу расширенную библиотеку сериализации. Я не уверен, каково его ограничение от http://www.boost.org/doc/libs/1_42_0/libs/serialization/doc/tutorial.html

Ответы [ 3 ]

3 голосов
/ 20 марта 2010

Это действительно зависит от того, что вы ищете. Если вы ищете суперскоростную скорость и быструю разработку в библиотеке, Boost просто великолепен. Если вам нужна сверхбыстрая скорость, немного больше возможностей настройки и кросс-библиотечная бинарная совместимость, то Qt - отличное решение (не говоря уже о том, что Boost не может сделать это тоже). Если вы ищете сумасшедшее взаимодействие, то ищите систему сериализации на основе текста, такую ​​как JSON ( jsoncpp ), YAML ( yamlcpp ) или XML ( way слишком много), каждая из которых имеет около 8 миллиардов независимых библиотек.

3 голосов
/ 20 марта 2010

Буферы протокола - это библиотека, разработанная и используемая Google для сериализации объектов на разных языках. Это может немного отличаться по концепции от того, что вы описываете, но на это стоит взглянуть.

1 голос
/ 27 апреля 2012

Ядро Linderdaum Engine Core (объекты iObject, iStaticClass и clLinker) предоставляют пользовательский RTTI для C ++.

Идея, лежащая в основе сериализации, проста: мы используем автоматический постпроцессор исходного кода (LSDC) для генерации всего кода сохранения / загрузки и регистрации для всех метаклассов и свойств. Любой объект может быть сериализован в сценарий языка разметки абстрактного дерева и обратно. XML и пользовательский JSON-подобный (мы называем это XLML) скрипт поддерживаются.

Детали реализации описаны в этом ответе: https://stackoverflow.com/a/10332336/1182653

  1. Поддерживается любой класс, производный от iObject
  2. Поддерживаются иерархии объектов
  3. Поддерживаются «деревья» объектов
  4. std :: vector-подобные контейнеры (с поддержкой семантики push_back / size) поддерживаются
  5. Ну, свойства определены явно, и «исправление указателя» может быть выполнено в пользовательском методе iObject :: EndLoad () (переопределенном в пользовательских классах)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...