Название: Сериализация Отправлено: SubaroMows от Сентябрь 23, 2011, 15:07 Возникла задача сериализовать объект определённого класс.
В этом классе мне нужно хранить объекты других классов, количество я их изначально не знаю, так как их добавляет пользователь. Вопрос такой: Нужно сериализовать только только объект общего класса? Или + к этому нужно ещё и сериализовать объекты внутри этого объекта? Название: Re: Сериализация Отправлено: kambala от Сентябрь 23, 2011, 16:02 + к этому нужно ещё и сериализовать объекты внутри этого объекта Название: Re: Сериализация Отправлено: SubaroMows от Сентябрь 23, 2011, 16:18 А есть способы этого избежать?
Название: Re: Сериализация Отправлено: kambala от Сентябрь 23, 2011, 16:31 вряд ли, ведь тогда не будет никакой информации о природе объекта и каким образом его десереализовать.
нужно предъявить требование к пользовательским классам реализовывать какой-то интерфейс, если это, конечно, возможно. Название: Re: Сериализация Отправлено: Fregloin от Сентябрь 24, 2011, 09:18 Ну а что мешает ввести поле типа enum {ceObject,ceObject1,ceObjct2...} classEnum;
В этом перечислении определяешь уникальные номера для типов классов. Затем когда нужно узнать как работать с классом, получаешь его тип, и в switch-е приводишь к конкретному классу по dynamic_cast. Это конечно далеко не лучший способ, но он работает. Название: Re: Сериализация Отправлено: brankovic от Сентябрь 24, 2011, 09:27 Ну а что мешает ввести поле типа enum {ceObject,ceObject1,ceObjct2...} classEnum; ... dynamic_cast. да что вы такое говорите страшное? Если идти путём рантайм-полиморфизма, то надо делать нормальный интерфейс типа такого: class serializable { virtual void serialize (stream &) = 0 virtual void deserialize (stream &) = 0 } Какой-то енум, динамик каст, зачем всё это? Название: Re: Сериализация Отправлено: LisandreL от Сентябрь 24, 2011, 12:11 Какой-то енум, динамик каст, зачем всё это? В вашем способе от enum'а мы никуда не уйдём. Мы ж должны узнать, какой тип мы десериализуем. Название: Re: Сериализация Отправлено: Igors от Сентябрь 24, 2011, 14:04 Какой-то енум, динамик каст, зачем всё это? В вашем способе от enum'а мы никуда не уйдём. Мы ж должны узнать, какой тип мы десериализуем. Очень важно писать в поток версию объекта (обычно static член). Иначе потом придется рвать волосы (на многих местах). Ну и контроль целостности данных (хотя в Ассыстенте я такого не помню). |