Convert a Virtual-function-call Into a Non-virtual-function-call

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();}
Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: