Паттерн сериализации / десериализации множества полиморфных объектов

Мне нужно сериализовать / десериализовать полиморфную иерархию, но я не совсем понимаю формат.

Как я понимаю, каждый уникальный тип объекта должен сериализоваться сам, начиная с «магического числа», чтобы обозначить тип, который впоследствии необходимо десериализовать фабрике. Однако должна ли десериализация выполняться отдельными классами или явно и полностью фабрикой?

Я предполагаю, что если десериализация обрабатывается отдельными классами, она будет более «элегантной» и структурированной, но учитывая, что большинство, если не все объекты, наследуются от других объектов и что данные должны использоваться для инициализации конструкторов базовых классов, я немного Непонятно, каким образом метод-член наследующего класса сможет этого добиться, поскольку инициализация базовых классов должна предшествовать ему.

Другой путь — отсоединить метод десериализации от отдельных классов и перенести весь этот код на фабрику, но это усложнит реализацию десериализации в полной противоположности сериализации. Это будет означать, что мне нужно извлечь все данные, необходимые для полной цепочки наследования для каждого класса, поместить их в стек и использовать для вызова соответствующих конструкторов.

Есть мысли на эту тему?

3

Решение

Сериализация и десериализация должны быть максимально симметричными. Лучше всего это сделать самим классом с помощью функции десериализации (например, operator>>()), поэтому фабрика создает класс на основе идентификатора, а затем передает поток в функцию десериализации. Затем эта функция может вызывать функцию десериализации базового класса.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector