我们可以创建一个有趣的结构式指向函数的指针数组。为了选择一个函数,只需要使用数组的下标,然后间接引用这个指针。这种方式支持表格式驱动码(table-driven code)的概念;可以根据状态变量(或状态变量的组合值)去选择被执行函数,而不用条件语句或case语句。这种设计方式对于要从表中添加或删除函数(或者想动态的创建或改变表)十分有用。
下面的例子使用预处理宏创建了一些哑函数,然后使用自动聚合初始化功能创建指向这些函数的指针数组。正如看到的那样,很容易从表中添加或删除函数(这样,这个程序就具有了函数功能)而只需要改变少量的代码。
#include "stdafx.h"
//Function table
//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 _tmain(int argc, _TCHAR* argv[])
{
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;
if (c<'a' || c>'g' )
{
continue;
}
(*func_table[c-'a'])();
}
return 0;
}