指向函数的指针数组

创建指向函数的指针数组,为了选择一个函数,只需使用数组的下标。然后间接引用这个指针。这种方式支持表格式驱动码(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'])();
  }
} ///:~













  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值