関数ポインタ

続いて、C言語入門講座?です。

#include <iostream>

using namespace std;

bool (*p)(); // こいつが関数ポインタ
bool Init();
bool MainLoop();
bool Finish();

bool Init(){cout << "Initialize..." << endl; p = MainLoop; return false;}
bool MainLoop(){cout << "MainLoop..." << endl; p = Finish; return false;}
bool Finish(){cout << "Finish!" << endl; return true;}

void main()
{
  p = Init;

  while(!p());

  cout << "Exit" << endl;
}

出力結果は、こんな感じです。

Initialize...
MainLoop...
Finish!
Exit

でも、一般的には、関数ポインタは配列にするべきなのかな?
 
例えば、

#include <iostream>

using namespace std;

bool (*p[3])(); // こいつが関数ポインタ
bool Init();
bool MainLoop();
bool Finish();

bool Init(){cout << "Initialize..." << endl; return false;}
bool MainLoop(){cout << "MainLoop..." << endl; return false;}
bool Finish(){cout << "Finish!" << endl; return true;}

void main()
{
  p[0] = Init;
  p[1] = MainLoop;
  p[2] = Finish;

  for(int i = 0; !p[i](); i++);

  cout << "Exit" << endl;
}

トークンの状態遷移なんかに使えそうな気がしますね。