0関数ポインタはCの中で最も強力なツールの中にはC. C ++で関数コールバックを実装するために使用することができますされているコールバックのためのわずかに異なるルートをとります。
1.関数ポインタ
//(1)関数を定義します
BOOL lengthCompare(CONST文字列&、CONST文字列&){
trueを返します。
}
//(2)関数ポインタを定義し、それを初期化します
BOOL(* PF)(定数文字列&、constの文字列&);
PF = lengthCompare。
//(3)関数ポインタを介して関数を呼び出します
cmpFcn PF = lengthCompare。// PFを初期化します
PF( "こんにちは"、 "さようなら")。//暗黙的に間接参照
(* PF)( "こんにちは"、 "タイプ"); //明示的に間接参照
//(4)は、このタイプの関数へのポインタであり、cmpFcn名前タイプを定義します。
typedef BOOL(* cmpFcn)(定数文字列&、constの文字列&);
typedef int型FUNC(int型*、int型); // funcが関数型ではなく、関数へのポインタです。
パラメータとして//(5)関数ポインタ
空useBigger(定数文字列&、constの文字列&、ブール値(*)(定数文字列&、constの文字列&));
空useBigger(定数文字列&、constの文字列&、ブール値(定数文字列&、constの文字列&));
戻り型として//(6)関数ポインタ
int型(* FF(int型))(int型*、int型); //以下のコードと同じです
typedef int型(* PF)(INT&、int型);
PF FF(int型); // FFは関数へのポインタを返します
//(7)例
INTメイン(){
C mpFcn PF1。
cmpFcn PF2 = 0。
cmpFcn PF3 = lengthCompare。
cmpFcn PF4 =&lengthCompare。
PF = lengthCompare。
coutの<< PF <<てendl; // 1つの
coutの<< PF1 <<てendl; // 0
coutの<< PF2 <<てendl; // 0
coutの<< PF3 <<てendl; // 1つの
coutの<< PF4 <<てendl; // 1
0を返します。
}
2. T ここでは、一つの関数型へのポインタと他との間に会話はありません。
関数ポインタは、その種類にこのポインタは全く同じである関数を指していなければなりません。
(コードのほとんどは、C ++プライマー第四版から来ています)