(先週の復習)case文の内容を関数化するこれでかなりプログラムはすっきりしたのですが、case文が100行、200行になってしまうと見苦しく感じる方もいると思います。そういう人にお勧めなのが関数のポインタを利用した条件分岐です。
switch( flag ){
case AAA: AAAExecute(); break;
case BBB: BBBExecute(); break;
:
:
}
関数のポインタを利用した条件分岐関数ポインタを使った条件分岐の利点は、分岐内容というデータ部と分岐をするという処理部をプログラム上で分離できることです。こうすることでプログラム全体がすっきりします。欠点は処理の流れを追うことが難しくなる点です。これを使うか使わないかは個人の好みで決定して良いと思います。
/*
* データ部
*/
void (*FunctionTable[])(void) = {
AAAExecute,
BBBExecute,
CCCExecute,
:
:
};/*
* 関数実装部
*/
void AAAExecute( void )
{
:
:
}
void BBBExecute( void )
{
:
:
}
:
:
:/*
* 条件分岐の部分
* switch( flag ){
* case AAA: AAAExecute(); break;
* case BBB: BBBExecute(); break;
* :
* :
* }
* が以下の1行に収まる。
*/
FunctionTable[flag]();