関数型


関数型とは、関数ポインタを保存する型のことです。関数型を定義するには、


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;

}