Страницы

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

вторник, 31 декабря 2019 г.

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

#cpp #json #xml #ооп #serializable


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


Ответы

Ответ 1



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

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

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