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

131
16 августа 2019, 09:20

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

Answer 1

Универсального решения нет - и быть не может без рефлексии - которая будет - возможно - только в следующих версиях плюсов - да и с ней - если будут накладные расходы - универсального решения не будет. Вы можете выбирать из библиотек. По скорости или удобству использования.

"свойства, аналогичные свойствам в C#, перед полями" реализуются всеми этими либами через макросы (слегка приврал), многое из того, что раньше можно было достичь только макросами сейчас можно достижимо средствами шаблонов C++, но:

  • вот пример использования boost::serialization c макросами.
  • Пример добавления рефлексии с шаблонами и макросами.
  • RTTI с макросами

Сами по себе макросы - зло, но бывают и необходимым злом.

я для себя взял rapidjson (пушо очень быстрая) и сделал вокруг нее пару обвязок типа stringValue / intValue. В принципе, достаточно удобно пока.

По поводу бустов: попользуйтесь, наверняка будет полезно. Выпиливать куски не надо, на рантайм это не повлияет, может быть только на время компиляции. Если подойдет другая либа для json/xml (POCO) например, берите ту, что вам удобнее в использовании. Вам главное инкапсулировать как можно больше, чтобы вы могли сменить потом либу, а не ловить ее вызовы по всему коду

READ ALSO
Как создать папку средствами c++

Как создать папку средствами c++

Мне нужно написать программу, которая будет сохранять файлы следующим образом

115
Взаимодействие Си функции и Lua [закрыт]

Взаимодействие Си функции и Lua [закрыт]

Если мы вызываем функцию си из луа, результат затем попадает в некую статическую функцию на которую мы ссылаемся (создает локальный стек)

123
Ошибка pointer being freed was not allocated при завершении программы

Ошибка pointer being freed was not allocated при завершении программы

При перегрузке оператора + выдает такую ошибку, как её можно пофиксить?

131
Разбор кода. Преобразование числа в цвет пикселя. Что такое data в изображениях

Разбор кода. Преобразование числа в цвет пикселя. Что такое data в изображениях

Что такое data для изображения? В данном коде это количество пикселей на битностЬ цвета (точно не знаю как это называется)

135