У меня есть иерархия типов - GenericClass и ряд производных классов, в том числе InterestingDerivedClass, GenericClass полиморфный. Там есть интерфейс
interface ICallback {
virtual void DoStuff( GenericClass* ) = 0;
};
, что мне нужно реализовать. Затем я хочу обнаружить случай, когда указатель GenericClass *, переданный в ICallback :: DoStuff (), действительно является указателем на InterestingDerivedClass:
class CallbackImpl : public ICallback {
void DoStuff( GenericClass* param ) {
if( dynamic_cast<InterestingDerivedClass*>( param ) != 0 ) {
return; //nothing to do here
}
//do generic stuff
}
}
GenericClass и производные классы находятся вне моего контроля, я только контролирую CallbackImpl.
Я рассчитал динамическое выражение: это занимает около 1400 циклов, что на данный момент приемлемо, но выглядит не очень быстро. Я попытался прочитать разборку того, что выполняется во время dynamic_cast в отладчике, и увидел, что для этого требуется много инструкций.
Поскольку мне действительно не нужен указатель на производный класс, существует ли более быстрый способ определения типа объекта во время выполнения только с использованием RTTI? Может быть, какой-то специфический для реализации метод, который только проверяет отношение «является», но не извлекает указатель?