M>что быстрее: switch (p->GetType()) или последовательный if (MessageClick* p2 = dynamic_cast<MessageClick*>(p)){} else if... M>Кто-нибудь знает насколько быстро работает dynamic_cast по сравнению с вызовом виртуальной функции?
Вообще, это некорректный вопрос. Для разных компиляторов значения будут разными. В принципе, можно ожидать, что switch будет быстрее. Например, для MSVC++7.0, если вызов функции принять за единицу, числа примерно такие:
Однако, следует заметить, что, за редким исключением, вместо поиска лучшего typeid следует пересмотреть дизайн приложения. Для большинства реальных приложений скорость выполнения инструкции dynamic_cast вполне адекватна. Кроме того, "самопальные" решения для RTTI в большинстве случаев не могут учесть многих тонкостей и, как следствие, обычно ведут к снижению надежности и/или ухудшению общего дизайна приложения.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен