kawa-tの日記: [メモ]メンバ関数のポインタ
日記 by
kawa-t
メンバ関数のポインタはvoid*よりも大きいので、void*を介するキャストはできない。引数の数や型、戻り値の型の違うメンバ関数を1つの変数で扱いたいなら、共用体を使う。
オブジェクトの型を静的に決定できているときに関数ポインタを介して関数を呼ぶ場合、g++で最適化なしでは、通常のメンバ関数を呼ぶよりも、オブジェクトのポインタを引数に与えて、staticメンバ関数を呼んだ方が速い。-O2だと、同程度の速度になる。書きやすい方で書いておけばいいだろう。
動的に呼び出す関数を変えたい場合、関数ポインタを使わず、分岐を使って関数名を明示したほうが速いことがある。分岐後に呼び出す関数を静的に決定できて、インライン化が可能であるため。
オブジェクトの型を静的に決定できているときに関数ポインタを介して関数を呼ぶ場合、g++で最適化なしでは、通常のメンバ関数を呼ぶよりも、オブジェクトのポインタを引数に与えて、staticメンバ関数を呼んだ方が速い。-O2だと、同程度の速度になる。書きやすい方で書いておけばいいだろう。
動的に呼び出す関数を変えたい場合、関数ポインタを使わず、分岐を使って関数名を明示したほうが速いことがある。分岐後に呼び出す関数を静的に決定できて、インライン化が可能であるため。
[メモ]メンバ関数のポインタ More ログイン