関数ポインタ
続いて、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; }
トークンの状態遷移なんかに使えそうな気がしますね。