![]() |
|
|
![]()
|
|
| xTr1m |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: нет Всего: 1 |
День добрый. Попытался привести типы при помощи dynamic_cast
в результате получил 0, а вот так вот приведение сработало
Собственно вопрос: почему dynamic_cast не смог привести от Cwnd* к CEdit*? Или он приводит только он наследника к базовому? |
||||
|
|||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 6 Всего: 50 |
Если у тебя предком твой диалог - вызывай
Это сообщение отредактировал(а) Alca - 12.2.2010, 16:39 |
|||
|
||||
| unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: нет Всего: 8 |
-------------------- ![]() обычный день на винграде |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
reinterpret_cast - никакое не приведение, а просто другая интерпретация указателя. Оно всегда работает. Но не факт, что правильно. Что касается первого предложения, то, видимо, контрол не CEdit, вот и все. Причем пойми правильно: между виндовским эдитом и объектом CEdit связь зыбкая. Если ты нигде не создал объект типа CEdit для данного контрола, то ему неоткуда взяться. GetDlgItem возвращает ВРЕМЕННЫЙ объект типа CWnd. Приведение reinterpret безопасно, т.к. CEdit не содержит дополнительных членов данных, а поведение в любом случае определяется оконной функцией. -------------------- ... |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 1 Всего: 39 |
Вообще зло использовать reinterpret_cast, если до этого дело доходит, значит программер из вас еще тот.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Dem_max, так голословно утверждать нельзя. Особенно, программируя под Виндоус и используя АПИ. Там без приведения типов ну никак. Например,стандартная сигнатура процедуры потока имеет аргумент DWORD/ Обычно туда передают какой-то объект. И как без приведения. Или взять сами оконные процедуры.Конечно, если приведение (любое) встречается на каждом шагу и не связано с АПИ или кодом, АПИ расширяющем, здесь есть о чем задуматься.
-------------------- ... |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 1 Всего: 39 |
Особенно тут вообще не нужно ничем кастовать. Особенно. Ибо после таких программистов у нас и получаются глючные программы. Любой каст это зло. Если дело доходит до каста значит вы делаете что-то не правильно. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Dem_max, я же привела пример - процедура потока и распаковка аргументов оконных сообщений. Ну и покажи, как здесь без приведения обойтись. А так просто утверждать - зло - глупость полная. А глючные программы у нас получаются после программистов, которые думают не головой, а штампами.
-------------------- ... |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 1 Всего: 39 |
Для распаковки оконных сообщений подойдет и приведение в стиле Си.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
гораздо хуже (опаснее), чем reinterpret_cast. Это приведение объединяет в себе возможности всех трех cpp-кастов. Но в отличие от них, просто глядя на локальный код, невозможно точно сказать, что получается в результате (без анализа контекста). Ты уж меня извини, но как я и думала, в голове у тебя каша из штампов. -------------------- ... |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 1 Всего: 39 |
Думай ка хочешь, но я останусь при своем мнении. И отсутствии глюков в программе.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
Dem_max, Earnest всё правильно сказала. Из твоих сообщений следует, что ты не понимаешь как работают касты в С и С++, в чём семантическая суть reinterpret_cast, поэтому вместо того, чтобы спорить об очевидных вещах в публичном месте, просветись по этой теме. А пока что ты неправ.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
Книжек начитался? Кастов нужно по возможности избегать (т.е. проектировать систему так, чтобы касты были не нужны), а не считать их злом. Даже reinterpret_cast может понадобиться. Для меня надобность в cast-е - повод призадуматься и только. Не припоминаю на своей практике ни одной ошибки в программе связанной с использованием приведения типов. Стереотипы - зло, касты - необходимость в любом языке, со строгой типизацией. Это сообщение отредактировал(а) azesmcar - 15.2.2010, 15:46 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |