1

仮想クラス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();
}

ただし、場合によっては、calcAND の実際の型を知っていて、パフォーマンス上の理由からインライン化したいことがあります。そこで、次の案を考えます。

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(...) ?

最初の例では、インライン化はできませんが、2 番目の例では、 op1()ofMyCalculatorは 内にインライン化する必要があると思いますcalculate()

私の仮定は本当ですか?

4

2 に答える 2