Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / меня замыкает IMPLEMENT_DYNAMIC / 5 сообщений из 5, страница 1 из 1
21.07.2005, 18:02
    #33178789
SeraTJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
меня замыкает IMPLEMENT_DYNAMIC
Народ, трям!

Кто может доступно и внятно объяснить, зачем нужны макросы:
DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC
DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE.

msdn не объясняет всех тонкостей. Непонятно, какие могут быть последствия, если не объявлять оконный класс динамическим. Да и вообще!!! Кумарят они меня :(( наверное потому, что непонятно.

Помогите, спасите! :)
...
Рейтинг: 0 / 0
22.07.2005, 09:36
    #33179354
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
меня замыкает IMPLEMENT_DYNAMIC
Да все там написано.
Все эти DYNAMIC-свойства позволяют реализовать три (казалось бы независимых, но на самом деле связанных) функциональности.

RTTI (run time type information), определение типов во время исполнения. Это обеспечивает DECLARE_DYNAMIC. Практически полный аналог C++ RTTI. Хочу напомнить, чтобы было ясно, зачем это нужно, - во время создания MFC в C++ еще не было RTTI, поэтому все разработчики серьезных библиотек реклизовывали ее сами. RTTI через DECLARE_DYNAMIC не поддерживает множественное наследование внутри себя, но и не запрещает его снаружи.


Динамическое создание экземпляров классов во время работы программы, аналог фабрики классов (на самом деле, это и есть фабрика классов, только реализация размазана по всей библиотеке). Это обеспечивает DECLARE_DYNCREATE, причем DECLARE_DYNCREATE включает в себя то, что необходимо для реализации DECLARE_DYNAMIC, т.е.
Код: plaintext
DECLARE_DYNCREATE = DECLARE_DYNAMIC + динамическое создание.


Сериализация объектов в поток и восстановление из потока. Это обеспечивает DECLARE_SERIAL, причем DECLARE_SERIAL включает в себя DECLARE_DYNAMIC и DECLARE_DYNCREATE, т.е.
Код: plaintext
DECLARE_SERIAL = DECLARE_DYNCREATE + DECLARE_DYNAMIC + сериализация.
Сериализация позволяет записывать комплексные составные объекты сложной структуры записывать в поток (например в файл на диске) и затем динамически читая из потока создавать и полностью восстанавливать структуру и данные этих объектов. Например, это применяется для сохранения документов.
...
Рейтинг: 0 / 0
22.07.2005, 11:19
    #33179645
SeraTJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
меня замыкает IMPLEMENT_DYNAMIC
Большое спасибо, MasterZiv, за отличный развернутый ответ.
...
Рейтинг: 0 / 0
22.07.2005, 19:08
    #33180900
Хех!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
меня замыкает IMPLEMENT_DYNAMIC
MasterZivRTTI (run time type information), определение типов во время исполнения. Это обеспечивает DECLARE_DYNAMIC. Практически полный аналог C++ RTTI. Хочу напомнить, чтобы было ясно, зачем это нужно, - во время создания MFC в C++ еще не было RTTI, поэтому все разработчики серьезных библиотек реклизовывали ее сами. RTTI через DECLARE_DYNAMIC не поддерживает множественное наследование внутри себя, но и не запрещает его снаружи.
Абасаца! Аффтар жжет адназначна.
Всем распечатать и при наступлении депрессии перечитать.
Особо понравилось место "... во время создания MFC в С++ еще не было RTTI..."
Давно так не ржал. Вспомнилась инкарнация Microsoft Visual C++ 1.5XX
...
Рейтинг: 0 / 0
22.07.2005, 19:23
    #33180919
Хех!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
меня замыкает IMPLEMENT_DYNAMIC
Не могу не дополнить сагу ибо пятница.
Во времена создания MFC в C++ не было обработки исключений, поэтому все разработчики серьезных библиотек реализовывали ее сами. Макросы TRY - CATCH не поддерживали никакой типизации (ибо ее в C++ тогда не существовало), поэтому типизацию в макросе CATCH реализовывали тоже на макросах DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / меня замыкает IMPLEMENT_DYNAMIC / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]