私は最近、非仮想インターフェイス イディオム (NVI) を使用して C++ でインターフェイスを設計することにしました。主な目的は、デフォルト値を持つパラメーターを使用することです (したがって、デフォルト パラメーターが静的にバインドされているという事実によって引き起こされる問題を回避します)。
私は自分のクラスに次のようなかなり些細な宣言をしました:
class Interface{
public:
void func(Parameter p = 0);
virtual ~Interface();
private:
virtual void doFunc(Parameter p)=0;
};
void Interface::func(Parameter p){ doFunc(p); }
Interface::~Interface() {}
ヘッダーに関数本体を指定すると、関数がインライン化の候補として自動的にマークされることはわかっています (ただし、定義をクラスの外に配置するとそれが妨げられるかどうかはわかりません)。また、明らかな理由で仮想関数がインライン化されていないことも知っています (実行時にどの関数が呼び出されるかわからないため、明らかに関数の本体による呼び出しを置き換えることはできません)。
次に、この場合、func()
インライン化の候補としてマークされますか? これは仮想関数ではありませんが、仮想関数を呼び出します。インライン化できますか?
追加の質問: それだけの価値はありますか? 本体は 1 つのステートメントのみで構成されます。
この質問は、どこでも最適化を検索するのではなく、それについて学ぶためのものであることに注意してください。私は、この関数が数回しか呼び出されないことを知っています (まあ、今のところ、プログラムがどのように進化するかについては賢明かもしれません)。
ありがとう !