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();
}