Страницы

Поиск по вопросам

четверг, 10 января 2019 г.

Сериализация в С++

Прошу дать ссылки, или, если есть желание, рассказать вкратце о красивом, удобном способе сериализации полей класса в C++. Приведу пример (не уверен, что так можно, но хотелось бы) - использовать свойства, аналогичные свойствам в C#, перед полями, которые будут учавствовать в сериализации (но: рефлексия ?), все автоматически упаковывается в JSON/XML (если это важно, то JSON меня интересует в большей степени), аналогично читается из JSON/XML и инициализирует соостветствующие поля объекта.


Ответ

Универсального решения нет - и быть не может без рефлексии - которая будет - возможно - только в следующих версиях плюсов - да и с ней - если будут накладные расходы - универсального решения не будет. Вы можете выбирать из библиотек. По скорости или удобству использования.
"свойства, аналогичные свойствам в C#, перед полями" реализуются всеми этими либами через макросы (слегка приврал), многое из того, что раньше можно было достичь только макросами сейчас можно достижимо средствами шаблонов C++, но:
вот пример использования boost::serialization c макросами. Пример добавления рефлексии с шаблонами и макросами. RTTI с макросами
Сами по себе макросы - зло, но бывают и необходимым злом.
я для себя взял rapidjson (пушо очень быстрая) и сделал вокруг нее пару обвязок типа stringValue / intValue. В принципе, достаточно удобно пока.
По поводу бустов: попользуйтесь, наверняка будет полезно. Выпиливать куски не надо, на рантайм это не повлияет, может быть только на время компиляции. Если подойдет другая либа для json/xml (POCO) например, берите ту, что вам удобнее в использовании. Вам главное инкапсулировать как можно больше, чтобы вы могли сменить потом либу, а не ловить ее вызовы по всему коду

Комментариев нет:

Отправить комментарий