![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Здравствуйте, подскажите пожалуйста.
Есть дерево полиморфных классов Есть своя куча и свой менеджер В этой куче хранятся мои полиморфные объекты Есть массив с относительными указателями на объекты в этой куче Я хочу записать мою кучу на диск, перезапустить приложение, загрузить её и снова с ней работать. Как это можно сделать не нарушая работы виртуальных функций? Принцип работы виртуальных функций я знаю. Возможно ли тут что-то с виртуальным адресным пространством? Это сообщение отредактировал(а) georain - 24.8.2007, 20:43 |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
georain,
создай виртуальные методы save() и load() и в каждом классе их реализуй -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Ну хотелось бы сразу всем скопом записать, просто у меня этих объектов под 1е9
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
georain,
в объектах полиморфных классов есть указатели на другие объекты (или что-то, чей реальный размер не известен изначально)? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Нет, никаких указателей у классов нету, единственная проблема заключается в указателях на списки виртуальных функций.
|
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
которых может и не быть вовсе;) Сохранять нудо не куски raw памяти,а объекты Почитай про Serialization |
|||
|
||||
| georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Что-то я не очень понял как сериализация с полиморфными классами обходится,
Как в сохранённом объекте представлен тип класса? Ведь при загрузке класса я не знаю его тип. И если я хочу сам написать функцию сохранения для кажого класса отдельно, как мне записать информацию о классе для его восстановления (но не имя класса |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
georain,
фабрика объектов тебе поможет тип может быть представлен числовой константой -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
А можно и RTTI (typeid) воспользоваться. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
bsa,
а как ты будешь восстанавливать объект? с помощью typeid(...).name() можно записать в файл строку (которая идентифицирует класс объекта) непосредственно перед данными объекта а как восстанавливать по строке? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
georain, может не изобретать велосипед?
Я пользуюсь МФСшной сериализацией, объекты "сами" восстанавливаются можно юзать boost::serialization
думаю здесь решающую роль будет играть время записи(чтения) на(с) диск(а). А в реализациях сериализаций уже продумана буферизация данных. (ужас, что сказал |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
То есть я для каждого класса сам придумываю число? Или может это число можно от куда-нибудь выдернуть? boost::serialization штука хорошая, но несколько громозкая. Хочу иметь одну функцию в базовом классе для сохранения в бинарном виде! Размер получу из виртуальной функции my_size(), всё равно она уже есть. Как же класс идентифицировать? |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
georain, советую посмотреть сначала сюда: Premature optimization и сюда: Reinventing the wheel.
После осмысления сюда: Factory, если останется желание велосипед доделывать Добавлено через 2 минуты и 59 секунд интересно стало, чем это она громоздкая? |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |