c++ - Inlining of virtual function when I can specify the actual type of the object as a template parameter -


i have virtual class calculator , example implementation mycalculator of class.

template <class t> class calculator{     virtual void op1() = 0; };  template <class t> class mycalculator : public calculator{     void op1(){ do_something(); } }; 

when use op1() demonstrated in following function, compiler can of course not inline op1() since virtual:

void calculate(calculator* calc){     calc->op1(); } 

in cases, however, know actual type of calc , d inline performance reasons. think following idea:

template <class c> void calculate(c* calc){     calc->op1(); } 

i call function follows:

calculator c1 = new calculator(); calculate(c1); // no inling possible in calculate(...)  mycalculator c2 = new mycalculator(); calculate(c2); // inlining possible in calculate(...) ? 

in first example, inlining not possible, think in second example, op1() of mycalculator should inlined inside calculate().

is assumption true?

you can mark virtual function final in c++11 means cannot override in more derived class. compiler can inline function. otherwise compiler cannot assured not calling more derived type different override, therefore cannot inline.


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -