![]() |
|
![]() ![]() ![]() |
|
tonchitos |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: 1 Всего: 40 |
1) Есть у меня некая пользовательская библиотечка (проект подключается в солюшн), не использующая мфс.
2) и есть энное количество классов (тож почти библиотека), описанных в файле проекта, использующие ту библиотечку и тоже не использующие мфс и есть мой мфс проект... мне надо сохранить некий объект класса, который содержит кучу объектов классов из пп 1 и 2 соответственно наследовать все от собджект нет никакой возможности... есть ли возможность сохранения довольно сложного объекта ( не меняя класс его описывающий)... Позволит ли мне это реализовать буст сериализация?
как быть? -------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
||||
|
|||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ну в чем трабл? Напиши метод CMyClass::Serialize (CArchive&) и вызывай его в нужном месте. Не будет только динамического оздания - т.е. тебе нужно при загрузке самой создать объект и загрузить его. Да и динамическое создание можно без Object'ов сделать, если приспичит... мало ли способово реализовать фабрику объектов...
-------------------- ... |
|||
|
||||
tonchitos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: 1 Всего: 40 |
честно говоря не оч поняла...
вот у мя объект model myModel; я делаю так?:
но ведь myModel сложный объект, его ж так не сериализуешь... или чет не то? Это сообщение отредактировал(а) tonchitos - 11.7.2008, 13:50 -------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Что значит "не сериализуешь"? Само, конечно, не сериализуется. Так напиши для него сериализацию!
model::Serialize (CArchive& ar), и дальше по частям через Write\Read или Serizlize отдельных кусков И на кой тебе CObject::Serialize(ar);? Ты что, не знаешь, что в буфере лежит? Делать это имеет смысл только если у тебя в файле могут быть в произвольном порядке объекты разных типов. А если все жестко и заранее известно, то только место тратить ( в файле и в коде). -------------------- ... |
|||
|
||||
tonchitos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: 1 Всего: 40 |
так проблема в том что класс model я менять не могу. это раз
класс модел содержит очень много объектов классов, которые я тоже менять не могу class model { class1 myCl1; class2 myCl2; classn myCl3; ...................... }; class classn { classn1 myCln1; classn2 myCln2; classnm myClnm } я не могу вписать в класс модел сериализацию, плюс он не от cobjectа, плюс тем более яне могу трогать объеекты которые он содержит, тк это считай библиотека целая, я ж не могу ее всю переписать и для каждого класса написать сериализацию и все от собджекта наследовать.... у меня есть объект класса, и от этого надо плясать, максиммум я могу отнаследовать все от класса model но не трогая код описывающий класс и его содержимое... -------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
|||
|
||||
voov |
|
||||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Как я понял у myModel нет предка CObject.
Тогда так не прокатит
Сделай в классе myModel метод Serialize или может даже лучше MySerialize. В нем сделай сохранение/загрузку переменных-членов класса подобно коду выше. Если здесь возникнут вопросы - помогу. Потом делаешь так
Но это будет не МФС-ная сериализация, а просто сохранение/загрузка данных без контроля версий и графа объектов, о которых говорил Rapalex. В принципе если очень нужно, то контроль версий и все остальное тоже можно сделать руками, но придется повозиться. Так что думай надо оно тебе или достаточно простого сохранения данных. |
||||
|
|||||
tonchitos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: 1 Всего: 40 |
ну е мое...myModel же тоже содержит кучу объектов не наследованных от собжекта...все их менять нереально, это все равно что библиотеку переписать...
![]() -------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
|||
|
||||
voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
А ты их не меняй. Сохраняй их все в методе Serialize класса myModel.
|
|||
|
||||
tonchitos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: 1 Всего: 40 |
как? если операторы >> << ток для простых типов
-------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Во-первых, такие операторы можно написать для любых типов (вот скажем Cstring - это ведь не CObject), а во вторых есть еще Read\Write
-------------------- ... |
|||
|
||||
voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Да. Нужно добираться до простых типов в твоем объекте и сохранять их. Главное не перепутать последовательность при сохранении и загрузке. Да метод будет большой, но рабочий. Поддерживать изменения тоже будет не просто, но как я понял класс уже готов и меняться не должен.
|
|||
|
||||
tonchitos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: 1 Всего: 40 |
как я до них доберусь если это практически библиотека хоть и небольшая и менять ничего нельзя... но даже если я напишу для них операторы, ведь я так понимаю что при классе с объектами классов любой сложности вложенности необходимо чтобы для каждого сохраняемого объекта был сериалайз и чтобы они все от собджекта были... я не втыкаю... че мне делоть та? -------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
|||
|
||||
voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
думаю проще показать на примере. приведи пример класса, который нужно сохранить (только небольшой)
|
|||
|
||||
tonchitos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: 1 Всего: 40 |
ну что там приводить то?
смысл? есть класс, который содержит объекты других классов. код с описанием этого класса и прочих менять нельзя... они не наследованы от cobject не имеют сериализации и впихнуть ее туда нельзя.... есть только конечный класс, вот от него пожалуйста - можно наследовать и тп -------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
|||
|
||||
tonchitos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: 1 Всего: 40 |
ну так как мне его сохранять то?
-------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |