Re: По мотивам RTTI
От: OlegN  
Дата: 25.03.02 16:58
Оценка:
Здравствуйте Mishka, Вы писали:

M>Имею класс:

M>
M>class IMessage
M>{
M>public:
M>      virtual int GetType() const = 0;
M>};

M>class MessageClick
M>{
M>public:
M>      virtual int GetType() const {return MT_CLICK;}
M>};
M>


M>А потом в коде нужно, имея IMessage, узнать тип сообщения и привести его к этому типу. Так вот встал вопрос:

M>что быстрее: switch (p->GetType()) или последовательный if (MessageClick* p2 = dynamic_cast<MessageClick*>(p)){} else if...
M>Кто-нибудь знает насколько быстро работает dynamic_cast по сравнению с вызовом виртуальной функции?

Я бы спрашивал насколько медленно. Механизм виртуальных функции работает быстрее.
Но я бы на этом не останавливался. Ударьте полиморфизмом по switch в клиентском классе:

void OnMessage( const IMessage& Msg)
{
// обработка по умолчанию — аналог default в switch
// обычно ничего не делается
}

void OnMessage( const MessageClick& ClickMsg)
{
// специфичная обработка
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.