Самоописывающая сериализация графов объектов в C++
Более 10 лет назад я создал систему сериализации для решения задачи, с которой плохо справляются JSON, protobuf и другие форматы — сохранение runtime-графов объектов с циклами, полиморфизмом и ссылками.
Большинство сериализаторов работают с деревьями, но ломаются на:
Циклических зависимостях
Указателях между объектами
Наследовании и полиморфизме
Ссылках на поля других объектов
Моя система умеет всё это — и даже слишком. Она полностью самоописывающаяся, сохраняет полную информацию о типах и связях, имеет бинарный формат и изоморфный ему текстовый дамп для отладки.
В статье покажу:
Как сериализовать графы с циклами без ручного кода
Работу с полиморфизмом через TAutoPtr<BaseClass>
Почему TFieldPtr (ссылки на поля объектов) оказался тупиковой идеей
Что сработало, а что пришлось выбросить спустя годы
Это не готовая библиотека — проект заморожен из-за проблем со временем компиляции. Но архитектурные решения и полученный опыт до сих пор актуальны для разработчиков сложных систем.
Статья для тех, кто устал бороться с ограничениями стандартных сериализаторов при работе с объектными графами.
Читать далее