WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Сериализация объектов

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Сериализация объектов
zlelik опубликован 03-12-2001 20:39 MSK   Click Here to See the Profile for zlelik   Click Here to Email zlelik  
Как нормально сериализовать объект класса CArray? Если писать типа
if (ar.IsStoring())
{
ar<<MyArray;
}
if (ar.IsLoading())
{
ar>>MyArray;

}

То компилятор выдает ошибку, хотя метод Serialize() у класса CArray есть. Как быть? или вообще как сериализовать что-то типа
void *lpBuff;

Gaper опубликован 04-12-2001 05:23 MSK     Click Here to See the Profile for Gaper  Click Here to Email Gaper     
Не у всего, у чего есть метод Serialize, есть перегруженные операторы <</>>. Попробуй напрямую вызывать этот метод.

А если хочешь сделать сериализацию своих классов, то наследуй от CObject.

zhevak опубликован 06-12-2001 04:22 MSK     Click Here to See the Profile for zhevak  Click Here to Email zhevak     
Если еще остались поблемы, могу выслать свои исходники на эту тему. Пиши. А вообще посмотри в книжке Биллига и Мусикаева (с 174). Она дурная, но этот вопрос там хорошо освещен
Kir1 опубликован 06-12-2001 15:07 MSK     Click Here to See the Profile for Kir1  Click Here to Email Kir1     
мне, кажется, что тебе необходимо обеспечить механизм сериализации для объектов на базе которых построен CArray (это ведь шаблон)...
А вообще ты уверен, что в CArray есть реализация сериализации(извиняюсь за коломбур)? по-моему ты должен сам её реализовать в своем классе (производном от CArray)..., если же ты судишь о наличии его по подсказке, что выдает визуал, то ошибаешься, тк класс CArray производный от CObject, где действительно есть чисто виртуальнай функция сериализации...
Для того, чтобы обеспечить сериализацию своего класса тебе нужно:
1. Сделать его произв. от класса CObject или потомка
2. Написать макросы:DECLARE_SERIAL(твой класс)- в классе с описанием класса
и IMPLEMENT_SERIAL(твой класс,род. класс, 0)
3. реализовать функцию virtual void Serialize(CArchive& ar);
вроде всё, удачи :)
Kir1 опубликован 06-12-2001 16:56 MSK     Click Here to See the Profile for Kir1  Click Here to Email Kir1     
ой,чуть не забыл :) ещё нужен конструктор по умолчанию...
Gaper опубликован 06-12-2001 23:13 MSK     Click Here to See the Profile for Gaper  Click Here to Email Gaper     
Склероз. Как сказали, что шаблон, вспомнил...

CompareElements
ConstructElements
CopyElements
DestructElements
DumpElements
HashKey
SerializeElements

Эти ГЛОБАЛЬНЫЕ функции-ШАБЛОНЫ надо реализовать так, чтобы они работали с вашим классом (или классами, тогда несколько реализаций). Необязательно все, хотя, если следовать букве закона, желательно.

Подробности - см. MSDN (указатель "helper functions")

Но мне было проще это усвоить, читая исходники MFC. Точнее, комбинируя первый способ со вторым :) Кстати, эти исходники проще читать (да и исходники любой большой библиотеки), сделав отдельный проект и засунув туда все файлы этой библиотеки. Иногда я даже умудрялся перекомпилировать библиотеку после своего редактирования нескольких файлов (ошибки исправлял, или просто под себя подгонял)...

Gaper опубликован 06-12-2001 23:18 MSK     Click Here to See the Profile for Gaper  Click Here to Email Gaper     
Кстати, это не только к CArray относится, но и к CList и CMap.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.