PDA

Просмотр полной версии : Kрасиво, не правда ли?



Ull9
13.10.2006, 22:21
assert( dynamic_cast<MyType *>(p) == static_cast<MyType *>(p) );
MyType *p = static_cast<MyType *>(p);

NoXX
15.10.2006, 11:10
Ето на каком языке?:blink:

JackTheHack
15.10.2006, 12:07
Не парся и пиши на Дельфи.
Эт всё равно что англиский.:)

Николай
15.10.2006, 13:11
Это не красиво, ты Пролог не видел.

andriyBog
15.10.2006, 14:04
И что?
Всё равно никто ничего не понял,
для этого и существуют коментарии, научись пользоваться ими сначала

traveller
15.10.2006, 15:52
прикольно,
это ты задвинул, чтоб и при компиляции и при выполнении проги приведение с проверкой выполнялось?
и шо, работает? :good:

Николай
15.10.2006, 15:54
прикольно, при компиляции разве что-то выполняется? Когда я делал компилятор для С, в моё время компиляторы только компилировали...

traveller
15.10.2006, 15:57
я не знаю в какое это свое время... но сегодня
static_cast (в отличие от dynamic_cast) выполняется исключительно во время компиляции, и потому часть проверок осуществлять не может и не будет.

Николай
15.10.2006, 16:06
Не буду спорить, давно на Сях не кодил, но не совсем понял что там делает компилятор кроме сборки кода.

traveller
15.10.2006, 16:37
Ну например, если компилятор вдруг узнает (как раз с помощью static_cast) что ты пытаешься сделать приведение типов, не находящихся в отношении базовый -> порожденный, то он тебе скажет об этом. А dynamic_cast (если сможет) проверит - действительно объект порождённого класса, и что указатель - на базовый (но это уже на этапе выполнения)
Вообщем, я не препод, толком объяснить не сумею
:)

Ull9
15.10.2006, 18:12
Kрасота в следующем

Приведенный фрагмент делает и быстро и надежно даункаст. Т.е. каст вниз по иерархии. Динамок каст хорош тем, что при неверном кастинге вернет ноль поинтер, а статик каст всегда что то вернет. Ну и теперь дилемма, что применять? Более быстрое (статик каст) или более надежное (динамик каст).
Вот эта мини-идиома и позволяет делать и быстро и надежно.
Все основано на том, что асерт во время рилиз компиляции просто уберется.

Пилигрим
16.10.2006, 09:41
Это не красиво, ты Пролог не видел.
+1. В прологе реально такие хитрые вещи пишуться в пару строчек...
А зато элементарный для императивных языков, пишуться на пол экрана Ж)

firejump
17.10.2006, 09:42
Не парся и пиши на Дельфи.
Эт всё равно что англиский.:)
Совет по теме :) Вы б ещё на HTML посоветовали писать :D

[MavericK]
17.10.2006, 15:27
...ЭЭЭ Прикольно