Re[5]: Автоматический обход иерархии
От: Sm0ke Россия ksi
Дата: 14.09.22 16:43
Оценка:
Здравствуйте, Kazmerchuk Pavel, Вы писали:

KP>Здравствуйте, Videoman, Вы писали:


V>>Ну это уже совершенно другая задача же. Абстрактно, сериализация это набор вложенных друг в друга структур (классов и т.д.), в общем виде даже не унаследованных от общего предка. Вариантов масса. У меня, например, просто заводится два свободных шаблонных метода, условно, Pack, Unpack для каждого поддерживаемого типа. За сериализацию отвечает родитель, тот, кто владеет вложенной структурой. Также есть объект, условно, Archive, который определяет сам формат сериализации (Json, XML, Bibary и т.д.). О передается рекурсивно по всей иерархии и ему передаются нужные данные. Не очень понятно зачем тут нужны виртуальные функции

KP>Ну хорошо, пусть не виртуальные. Иерархию нужно обойти. Сериализовать нужно через указатель на базовый класс. Хочется избавить пользователя от необходимости дергать сериализацию родителя или хотя бы "сказать" ему что он забыл это сделать.

В базовом классе завести свойство вектор статических членов-функций сериализации (тут можно std::function или указатель на функцию), которые принимают указатель на базовый класс и кастуют его к своему классу.
В каждом конструкторе иерархии добавлять по своей функции в этот вектор.
Потом в базовом классе сделать метод, обходящий этот вектор и вызывающий все функции.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.