创建指向函数的指针数组,为了选择一个函数,只需使用数组的下标。然后间接引用这个指针。这种方式支持表格式驱动码(table-driven code)的概念;
可以根据状态变量(或状态变量的组合值)去选择被执行函数,而不用条件语句或case语句。
这种设计方式对于经常要从表中添加或删除函数(或者想动态的创建或改变表)十分有用。
下面的例子使用预处理宏创建了一些哑函数,然后使用自动集合初始化功能创建指向这些函数的指针数组。
正如看到的那样,很容易从表添加或删除函数(这样,这个程序就具有了函数功能)而只需改变少量代码
//FunctionTable.cpp
// Using an array of pointers to functions
#include <iostream>
using namespace std;
// A macro to define dummy functions:
#define DF(N) void N() { \
cout << "function " #N " called..." << endl; }
DF(a); DF(b); DF(c); DF(d); DF(e); DF(f); DF(g);
void (*func_table[])() = { a, b, c, d, e, f, g };
int main() {
while(1) {
cout << "press a key from 'a' to 'g' "
"or q to quit" << endl;
char c, cr;
cin.get(c); cin.get(cr); // second one for CR
if ( c == 'q' )
break; // ... out of while(1)
if ( c < 'a' || c > 'g' )
continue;
(*func_table[c - 'a'])();
}
} ///:~