我有一个类型层次结构 - GenericClass和许多派生类,包括InterestingDerivedClass,GenericClass是多态的。这里有一个接口
interface ICallback {
virtual void DoStuff( GenericClass* ) = 0;
};
我需要实现的功能是检测当传递给ICallback::DoStuff()的指向GenericClass*的指针实际上是指向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。我对dynamic_cast语句进行了计时 - 这需要大约1400个周期,目前来说是可以接受的,但看起来并不是很快。我试着在调试器中阅读执行dynamic_cast期间所执行的反汇编代码,并发现它执行了很多指令。由于我真的不需要指向派生类的指针,所以有没有一种更快的方法只使用RTTI在运行时检测对象类型?也许有一些特定于实现的方法只检查“is a”关系而不检索指针?