assert( dynamic_cast<MyType *>(p) == static_cast<MyType *>(p) );
MyType *p = static_cast<MyType *>(p);
|
assert( dynamic_cast<MyType *>(p) == static_cast<MyType *>(p) );
MyType *p = static_cast<MyType *>(p);
Ето на каком языке?![]()
In TRANCE I trust...
Не парся и пиши на Дельфи.
Эт всё равно что англиский.![]()
Это не красиво, ты Пролог не видел.
/dev/gmaker
И что?
Всё равно никто ничего не понял,
для этого и существуют коментарии, научись пользоваться ими сначала
прикольно,
это ты задвинул, чтоб и при компиляции и при выполнении проги приведение с проверкой выполнялось?
и шо, работает?![]()
прикольно, при компиляции разве что-то выполняется? Когда я делал компилятор для С, в моё время компиляторы только компилировали...
/dev/gmaker
я не знаю в какое это свое время... но сегодня
static_cast (в отличие от dynamic_cast) выполняется исключительно во время компиляции, и потому часть проверок осуществлять не может и не будет.
Не буду спорить, давно на Сях не кодил, но не совсем понял что там делает компилятор кроме сборки кода.
/dev/gmaker
Ну например, если компилятор вдруг узнает (как раз с помощью static_cast) что ты пытаешься сделать приведение типов, не находящихся в отношении базовый -> порожденный, то он тебе скажет об этом. А dynamic_cast (если сможет) проверит - действительно объект порождённого класса, и что указатель - на базовый (но это уже на этапе выполнения)
Вообщем, я не препод, толком объяснить не сумею
:)
Kрасота в следующем
Приведенный фрагмент делает и быстро и надежно даункаст. Т.е. каст вниз по иерархии. Динамок каст хорош тем, что при неверном кастинге вернет ноль поинтер, а статик каст всегда что то вернет. Ну и теперь дилемма, что применять? Более быстрое (статик каст) или более надежное (динамик каст).
Вот эта мини-идиома и позволяет делать и быстро и надежно.
Все основано на том, что асерт во время рилиз компиляции просто уберется.
+1. В прологе реально такие хитрые вещи пишуться в пару строчек...Сообщение от Николай
А зато элементарный для императивных языков, пишуться на пол экрана Ж)
Совет по темеСообщение от JackTheHack
Вы б ещё на HTML посоветовали писать
![]()
Viva La Barca !!! We are the champions :)
Социальные закладки