Автор
|
Тема: Сериализация объектов
|
zlelik |
опубликован 03-12-2001 20:39 MSK
Как нормально сериализовать объект класса CArray? Если писать типа if (ar.IsStoring()) { ar<<MyArray; } if (ar.IsLoading()) { ar>>MyArray; }То компилятор выдает ошибку, хотя метод Serialize() у класса CArray есть. Как быть? или вообще как сериализовать что-то типа void *lpBuff;
|
Gaper
|
опубликован 04-12-2001 05:23 MSK
Не у всего, у чего есть метод Serialize, есть перегруженные операторы <</>>. Попробуй напрямую вызывать этот метод.А если хочешь сделать сериализацию своих классов, то наследуй от CObject. |
zhevak
|
опубликован 06-12-2001 04:22 MSK
Если еще остались поблемы, могу выслать свои исходники на эту тему. Пиши. А вообще посмотри в книжке Биллига и Мусикаева (с 174). Она дурная, но этот вопрос там хорошо освещен |
Kir1
|
опубликован 06-12-2001 15:07 MSK
мне, кажется, что тебе необходимо обеспечить механизм сериализации для объектов на базе которых построен 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
ой,чуть не забыл :) ещё нужен конструктор по умолчанию... |
Gaper
|
опубликован 06-12-2001 23:13 MSK
Склероз. Как сказали, что шаблон, вспомнил...CompareElements ConstructElements CopyElements DestructElements DumpElements HashKey SerializeElements Эти ГЛОБАЛЬНЫЕ функции-ШАБЛОНЫ надо реализовать так, чтобы они работали с вашим классом (или классами, тогда несколько реализаций). Необязательно все, хотя, если следовать букве закона, желательно. Подробности - см. MSDN (указатель "helper functions") Но мне было проще это усвоить, читая исходники MFC. Точнее, комбинируя первый способ со вторым :) Кстати, эти исходники проще читать (да и исходники любой большой библиотеки), сделав отдельный проект и засунув туда все файлы этой библиотеки. Иногда я даже умудрялся перекомпилировать библиотеку после своего редактирования нескольких файлов (ошибки исправлял, или просто под себя подгонял)... |
Gaper
|
опубликован 06-12-2001 23:18 MSK
Кстати, это не только к CArray относится, но и к CList и CMap. |