Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Сериализация |
Автор: knut 10.7.2007, 14:59 | ||||
Есть некий класс cFor_Save надо соxранить обект этого класса в фаил.
действие. 1.перегружаем для класса каторый надо соxранить операторы << и >>. 2.Создаем 2 функции а.void Load_File(LPCTSTR file_name); б.void Save_File(LPCTSTR file_name); типа так?
прав я? |
Автор: Xenon 10.7.2007, 15:05 |
knut, у тебя в цикле сериализуются указатели, а не объекты. Ты в файл засунь сначала, допустим, все POD типы, затем размер вектора m_vector, а затем все элементы вектора. |
Автор: jonie 11.7.2007, 02:15 | ||
как написать "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( |