2

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

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

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

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

Есть мыслит по теме?

ответ

0

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

Смежные вопросы