![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
knut |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 7.2.2006 Репутация: нет Всего: нет |
Есть некий класс cFor_Save надо соxранить обект этого класса в фаил.
действие. 1.перегружаем для класса каторый надо соxранить операторы << и >>. 2.Создаем 2 функции а.void Load_File(LPCTSTR file_name); б.void Save_File(LPCTSTR file_name); типа так?
прав я? --------------------
|
||||||
|
|||||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
knut, у тебя в цикле сериализуются указатели, а не объекты.
Ты в файл засунь сначала, допустим, все POD типы, затем размер вектора m_vector, а затем все элементы вектора. |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
как написать "obj<<vector" (чтобы убрать цикл)) ? написать свой вектор где эти операци перегрузить... можно отнаследовать от std::vector свой класс...
далее можно будет писать ... ну и , конечно, перегрузить << для объектов содержащихся в векторе. _______________ а я когда-то делал замудрнее много. для моей сериализации не надо было писать подобные методы... было : 1)базовый класс ISerilizable. 1.1) в нем void SerilizeSetup()=0; -- в ней заполнялась внутреняя карта std::map<string,PROPERTY> были наляпаны макросы, поэтому вся реализация этого метода в потомках выглядела как
1.1.1)где PROPERTY - была структура вида {void* lpMemory, size_t memSize, тип_памяти, тип_ссылаемого_объекта,PROPERTY* lpMemorySingle }, где тип_памяти - статическая\динамическая (при сериализации класс сам захватывал память), тип_ссылаемого_объекта - тип того что можно сериализовать (классы унаследованные от ISerilizable, массивы объектов, базовые типы, некоторые STL-вские типы..),lpMemorySingle - указатель на описатель "элемента", если сам элемент был массивом (т.е. поддерка массива-массивов-массивов...), ну и еще были поля типа нужноли изменять значения под указателем lpMemory в случае динамического элемента (например была сериализация char* data, Где передавался &data - его менять надо, а вот char** data - в ней "второй ярус" уже можно расставлять самому..) 1.2) класс содержал два метода обственно сериализации и десериализации. При их вызове был вызов SerilizeSetup() и далее (де)сериализация сама. работало это довольно "красиво"... невозможно было например десериализовать классы динамические (невозможно вызвать конструкторы и заполнить __vpft)....ну и еще были проблемы) но это работало как говорится "с ходу"...да еще и подстыковав самопальный dataaldpter можно было сериализовать хоть куда (было реализовано правда только XML)... финальная версия, к сожалению, была утеряна мной всвязи с падением SVN репозитория 8( Это сообщение отредактировал(а) jonie - 11.7.2007, 02:16 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
достаточно написать соответствующий оператор для потока и вектора. в наследовании и написаниии нового вектора необходимости нет. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |