cereal

Легковесная библиотека сериализации на C++11, разработанная для эффективного и безопасного преобразования данных в различные форматы. Библиотека работает по принципу "header-only", не имеет внешних зависимостей и предоставляет простой, интуитивно понятный API для сохранения и загрузки данных в бинарном, XML и JSON форматах. cereal поддерживает широкий спектр типов, включая все контейнеры стандартной библиотеки, умные указатели и пользовательские классы.

Особенности

  • поддержка трёх форматов сериализации: бинарный, XML и JSON;
  • поддержка версионирования классов для обратной совместимости;
  • работа с умными указателями, полиморфными типами и наследованием;
  • сериализация всех контейнеров STL без необходимости дополнительного кода;
  • возможность именования полей для человеко-читаемых форматов.

Основные компоненты

Библиотека состоит из нескольких модулей, обеспечивающих работу с различными форматами сериализации и поддержку разнообразных типов данных (подробнее с документацией можно ознакомиться здесь).

Архивы сериализации

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

Основные классы архивов:

  • cereal::BinaryOutputArchive и cereal::BinaryInputArchive — бинарная сериализация с максимальной производительностью и компактностью;
  • cereal::PortableBinaryOutputArchive и cereal::PortableBinaryInputArchive — переносимый бинарный формат, одинаковый на всех платформах;
  • cereal::XMLOutputArchive и cereal::XMLInputArchive — человеко-читаемый XML-формат с поддержкой именованных полей;
  • cereal::JSONOutputArchive и cereal::JSONInputArchive — JSON-формат для обмена данными с веб-приложениями.

Сериализация пользовательских классов

Для поддержки пользовательских типов необходимо определить метод сериализации. Библиотека предоставляет несколько гибких подходов к описанию процесса сериализации.

Основные методы:

  • template<class Archive> void serialize(Archive & archive) — встроенный метод класса, который архивирует все необходимые поля;
  • template<class Archive> void save(Archive & archive) const и template<class Archive> void load(Archive & archive) — раздельные методы для сохранения и загрузки, позволяющие реализовать различную логику;
  • template<class Archive> void serialize(Archive & archive, const std::uint32_t version) — метод с поддержкой версионирования класса;
  • CEREAL_SERIALIZE(archive, ...) — макрос для объявления дружественной функции сериализации вне класса.

Именованные значения

Для человеко-читаемых форматов (XML, JSON) библиотека поддерживает именование полей, что делает выводимые данные более понятными и структурированными.

Основные функции для работы с именами:

  • CEREAL_NVP(variable) — макрос, создающий пару имя-значение с именем, совпадающим с именем переменной;
  • cereal::make_nvp(name, variable) — функция для создания пары с произвольным именем.

Версионирование классов

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

Основные элементы версионирования:

  • CEREAL_CLASS_VERSION(ClassName, VersionNumber) — макрос для объявления версии класса;
  • version — дополнительный параметр в методе serialize, содержащий версию класса.

Полиморфизм и наследование

Библиотека предоставляет механизмы для корректной сериализации иерархий классов с виртуальными функциями.

Ключевые возможности:

  • cereal::base_class<Base>(derived) — обёртка для сериализации базового класса;
  • CEREAL_REGISTER_TYPE(Derived) — макрос для регистрации производного класса в системе полиморфной сериализации;
  • CEREAL_REGISTER_POLYMORPHIC_RELATION(Base, Derived) — явное указание отношений наследования.

Минимальная сериализация

Для простых типов данных cereal предоставляет механизм минимальной сериализации, который автоматически генерирует код для сериализации всех public-полей класса.

Основные компоненты:

  • CEREAL_SERIALIZE(archive, ...) — макрос для автоматической сериализации списка полей;
  • CEREAL_LOAD_MINIMAL_FUNCTION_NAME и CEREAL_SAVE_MINIMAL_FUNCTION_NAME — настройка имён функций для минимальной сериализации.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "cereal/1.3.2@aurora",
    )    

Процесс локальной сборки описан в документации.

cereal

Serialization header-only library for C++11.
Лицензия
BSD-3-Clause
Версия
Автор
Daniil Markevich <d.markevich@omp.ru>
Домашняя страница
Скачать
package
240.79 Kb
MD5: 4a0f95764194fa7789211c00e593cbfe
Updated: 13.11.2025, 13:15:29
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.