あなたのコンパイラで完全な最適化を有効にしてこのようなクラスを設定しているしている場合:C++:関数ラッパーはインラインで動作しますか?
class A
{
void Do_A_Stuff();
};
class B
{
A a;
void Do_B_Stuff() { a.Do_A_Stuff(); }
};
class C
{
B b;
void Do_C_Stuff() { b.Do_B_Stuff(); }
};
class D
{
C c;
void Do_D_Stuff() { c.Do_C_Stuff(); }
};
は、これまでDo_D_Stuff()
を呼び出すと直接Do_A_Stuff()
を呼び出すよりも遅くなるような状況はありますか?また、これは各ラッパー 'チェーン'のキーワードinline
を必要としますか?それは単なる提案なので、コンパイラーはキーワードなしでこれを最適化することができますか?
インライン化について多くの情報がありますが、多くのラッパーを連鎖させることについての情報は特に見つかりませんでした。
はい、関数は 'public'でなければなりません、私は簡潔にするつもりでした。 :) – Jonathan
* "または関数の定義がコンパイラに見えない場合" * - これは[リンクタイムコード生成]に適用されます(http://msdn.microsoft.com/en-us/library/xbf3tbeh (v = vs80).aspx)をMSVC(または他のコンパイラの同等のもの)で使用していますか?私はいつもそれに興味があります。 – JBentley
@JBentley:モジュール間のインライン展開も可能です。確認できる[この関連Q&A](http://stackoverflow.com/questions/5987020/can-the-linker-inline-functions)もあります。 –