Consider the code snippet below:
BaseClass *bp;for(i =0;i< VERY_LARGE_NUM;i++) bp->VirtualFunc();
Such a situation can lead to an unacceptably high overhead of calling a virtual function. This can be remedied by converting the virtual function call in a non-virtual function call. This code fragment shows how to directly call a virtual function so as to avoid the overhead of a virtual-function-call:
BaseClass *bp;if(typeid(*bp) == typeid(BaseClass)){ for(i =0;i< VERY_LARGE_NUM;i++) bp->BaseClass::VirtualFunc();}else if(typeid(*bp) == typeid(DerivedClass)){ for(i =0;i< VERY_LARGE_NUM;i++) bp->DerivedClass::VirtualFunc();}else{ for(i =0;i< VERY_LARGE_NUM;i++) bp->VirtualFunc();}