Russian Qt Forum
Ноябрь 27, 2024, 12:13
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Сериализация
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Сериализация (Прочитано 4581 раз)
SubaroMows
Гость
Сериализация
«
:
Сентябрь 23, 2011, 15:07 »
Возникла задача сериализовать объект определённого класс.
В этом классе мне нужно хранить объекты других классов, количество я их изначально не знаю, так как их добавляет пользователь.
Вопрос такой: Нужно сериализовать только только объект общего класса? Или + к этому нужно ещё и сериализовать объекты внутри этого объекта?
Записан
kambala
Джедай : наставник для всех
Online
Сообщений: 4747
Re: Сериализация
«
Ответ #1 :
Сентябрь 23, 2011, 16:02 »
Цитата: SubaroMows от Сентябрь 23, 2011, 15:07
+ к этому нужно ещё и сериализовать объекты внутри этого объекта
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
SubaroMows
Гость
Re: Сериализация
«
Ответ #2 :
Сентябрь 23, 2011, 16:18 »
А есть способы этого избежать?
Записан
kambala
Джедай : наставник для всех
Online
Сообщений: 4747
Re: Сериализация
«
Ответ #3 :
Сентябрь 23, 2011, 16:31 »
вряд ли, ведь тогда не будет никакой информации о природе объекта и каким образом его десереализовать.
нужно предъявить требование к пользовательским классам реализовывать какой-то интерфейс, если это, конечно, возможно.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Fregloin
Супер
Offline
Сообщений: 1025
Re: Сериализация
«
Ответ #4 :
Сентябрь 24, 2011, 09:18 »
Ну а что мешает ввести поле типа enum {ceObject,ceObject1,ceObjct2...} classEnum;
В этом перечислении определяешь уникальные номера для типов классов.
Затем когда нужно узнать как работать с классом, получаешь его тип, и в switch-е приводишь к конкретному классу по dynamic_cast.
Это конечно далеко не лучший способ, но он работает.
Записан
brankovic
Гость
Re: Сериализация
«
Ответ #5 :
Сентябрь 24, 2011, 09:27 »
Цитата: Fregloin от Сентябрь 24, 2011, 09:18
Ну а что мешает ввести поле типа enum {ceObject,ceObject1,ceObjct2...} classEnum;
... dynamic_cast.
да что вы такое говорите страшное? Если идти путём рантайм-полиморфизма, то надо делать нормальный интерфейс типа такого:
class serializable
{
virtual void serialize (stream &) = 0
virtual void deserialize (stream &) = 0
}
Какой-то енум, динамик каст, зачем всё это?
Записан
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: Сериализация
«
Ответ #6 :
Сентябрь 24, 2011, 12:11 »
Цитата: brankovic от Сентябрь 24, 2011, 09:27
Какой-то енум, динамик каст, зачем всё это?
В вашем способе от enum'а мы никуда не уйдём. Мы ж должны узнать, какой тип мы десериализуем.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сериализация
«
Ответ #7 :
Сентябрь 24, 2011, 14:04 »
Цитата: LisandreL от Сентябрь 24, 2011, 12:11
Цитата: brankovic от Сентябрь 24, 2011, 09:27
Какой-то енум, динамик каст, зачем всё это?
В вашем способе от enum'а мы никуда не уйдём. Мы ж должны узнать, какой тип мы десериализуем.
Ну необязательно, напр не будем же мы делать ID для каждой string - просто полагаем что она есть. Просто практически это ID всегда есть для приличных объектов чтобы они могли записываться/читаться в любом порядке.
Очень важно писать в поток версию объекта (обычно static член). Иначе потом придется рвать волосы (на многих местах). Ну и контроль целостности данных (хотя в Ассыстенте я такого не помню).
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...