結果だけでなく過程も見てください

たい焼きさんの日々の奮闘を綴る日記です。

関数ポインタについてまとめてみました

たまにしか使わないので、備忘録としてまとめておきました。

メンバ関数の関数ポインタ

戻り値の型がint、引数がfloatとdoubleの関数の場合。

サンプル関数
int sample( float f, double lf )
{
  :
  return 0;
}
宣言
int (*pFunc)(float, double);
代入・コール
pFunc = &sample;

int rc = pFunc( 2.0f, 1.5 );

staticなメンバ関数の関数ポインタ

基本的に非メンバ関数の関数ポインタと同様に扱うことができます。
戻り値の型がint、引数がfloatとdoubleのCSampleクラスのstaticなメンバ関数の場合。

サンプル関数
int CSample::sample( float f, double lf )
{
  :
  return 0;
}
宣言
int (*pFunc)(float, double);
代入・コール
pFunc = &CSample::sample;

int rc = pFunc( 2.0f, 1.5 );

メンバ関数の関数ポインタ

戻り値の型がint、引数がfloatとdoubleのCSampleクラスのメンバ関数の場合。

サンプル関数
int CSample::sample( float f, double lf )
{
  :
  return 0;
}
宣言
int (CSample::*pFunc)(float, double);
代入・コール

非staticメンバ関数の場合は、具体的なインスタンスが必要になります。

pFunc = &CSample::sample;

CSample instance;
CSample* pInstance( new CSample() );

int rc;
rc = (instance.*pFunc)( 2.0f, 1.5 );
rc = (pInstance->*pFunc)( 2.0f, 1.5 );

メンバ関数内でメンバ関数を呼ぶ場合は、thisポインタを使います。

int rc = (this->*pFunc)( 2.0f, 1.5 );