関数型とは、関数ポインタを保存する型のことです。関数型を定義するには、
functype 戻り型 関数型名(引数リスト); と、書きます。引数リスト中のオブジェクト名は省略できます。 |
関数型オブジェクトを生成するには、
関数型名 関数型オブジェクト名 |, 関数型オブジェクト名|; と、書きます。 |
関数型オブジェクトに関数ポインタを設定するには、
関数型オブジェクト = &関数名; という風に、関数名の前に&演算子を付けて下さい。 |
関数型オブジェクトに文字列を代入する事も出来ます。
関数型オブジェクト = 文字列値; 実行時に、その文字列と一致する関数ポインタが検索され、その 関数ポインタが代入されます。もし無かった場合は、NULLが代入 されます。 |
関数ポインタが設定された関数型オブジェクトを呼び出すには、
関数型オブジェクト(引数リスト) と、関数呼び出しと同じように書いて下さい。 関数型にどの関数が入っているかは、==や!=で比較できます。
functype void ft(void); ft a; a = &func; if (a == &func) a(); |
関数型オブジェクトは、グローバル・ローカル・構造体メンバとして 宣言できます。 |
引数として関数型オブジェクトを作成した場合、デフォルト引数を
設定できます。デフォルト引数に無効化関数ポインタを渡したい場合は、
NULLと書いて下さい。
// 関数型定義 functype void ftFunc(int); void func(ftFunc a = NULL) { } |
【例】 // 関数型定義 functype void ftFunc(int); // 関数型オブジェクト宣言 ftFunc g_Func; void Test(int nA) { } int main(void) { // 関数ポインタ設定 g_Func = &Test; // 関数呼び出し(Test()が呼び出されます) g_Func(16); // 関数ポインタ解除 g_Func = NULL; // 関数呼び出し(実行時エラーとなります) g_Func(256); return 0; } |