// ( t10.C ) // 関数へのポインタ:その応用 // #include // 例題1 void lsub1( void ) { cout << "Line make\n" ; } void lsub2( void ) { cout << "Line move\n" ; } void csub1( void ) { cout << "Circle make\n" ; } void csub2( void ) { cout << "Circle move\n" ; } typedef void (*PF)(void) ; PF l_menu[] = { lsub1,lsub2 } ; PF c_menu[] = { csub1,csub2 } ; void sub( int i ) { if ( i == 1 ) { PF* mouse = l_menu ; (*mouse[0])() ; (*mouse[1])() ; } else { PF* mouse = c_menu ; (*mouse[0])() ; // (*mouse[0])() を if 文の外に出すと (*mouse[1])() ; // mouse undefined とエラ−が出る。 } } // 例題2 class Line { public: Line() {} ; void make( void ) { cout << "LINE make\n" ; } void move( void ) { cout << "LINE move\n" ; } } ; typedef void ( Line::*CF)(void) ; CF p_menu[] = { &Line::make,&Line::move } ; main() { cout << "Select [1] or [2] : " ; int i ; cin >> i ; sub(i) ; Line a ; CF* popup = p_menu ; (a.*popup[0])() ; (a.*popup[1])() ; }