我有一个虚拟类Calculator
和该类的示例实现MyCalculator
。
template <class T>
class Calculator{
virtual void op1() = 0;
};
template <class T>
class MyCalculator : public Calculator{
void op1(){ do_something(); }
};
当我使用op1()
如下函数演示时,编译器当然不能内联op1()
,因为它是虚拟的:
void calculate(Calculator* calc){
calc->op1();
}
然而,在某些情况下,我知道calc
AND 的实际类型,出于性能原因我想内联它。于是我想到了下面的想法:
template <class C>
void calculate(C* calc){
calc->op1();
}
我会调用这个函数,如下所示:
Calculator c1 = new Calculator();
calculate(c1); // no inling possible in calculate(...)
MyCalculator c2 = new MyCalculator();
calculate(c2); // inlining possible in calculate(...) ?
在第一个示例中,内联是不可能的,但我认为在第二个示例中,op1()
ofMyCalculator
应该内联 inside calculate()
。
我的假设是真的吗?