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

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

プログラミング言語(主にC/C++)の文法でなかなか覚えにくいもの備忘録

メンバ関数ポインタの配列とコール方法

以下のようなクラスとメンバ関数があったとします。

class CTest
{
public:
  int print ( int nCount ){ ... }
  int print2( int nCount ){ ... }
};

メンバ関数ポインタの配列定義、関数の代入は以下のようになります。

int (CTest::*pFunc[2])(int);
pFunc[0] = &CTest::print;
pFunc[1] = &CTest::print2;

コールするときは以下。
メンバ関数ですので、具体的なインスタンスが必要となります。

CTest obj;

(obj.*pFunc[0])(  5 );
(obj.*pFunc[1])( 10 );

vectorなどに代入したいときは変数名と配列の[]を除いた以下のようになります。

vector<int (CTest::*)(int)> vpFunc( 2 );
vpFunc[0] = &CTest::print;
vpFunc[1] = &CTest::print2;

コールするときは以下。

(obj.*vpFunc[0])(  5 );
(obj.*vpFunc[1])( 10 );

参考サイトなど

第57章 メンバ関数ポインタ天国
http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03057.html

プライバシーポリシー お問い合わせ