请帮忙设置一个函数指针,请针的人帮助

版权声明:本文为博主原创文章未经博主允许不得转载。 /u/article/details/

笔者在开发某软件过程中遇到这样一个问题前级模块传给我二进制数据,输入参数为 char* buffer和 int lengthbuffer是数据的首地址,length表示这批数据的长度数据的特点是:长度不定,类型不定由第一个字节(buffer[0])标识该数据的类型,共有256(28 )种可能性我的任务是必须對每一种可能出现的数据类型都要作处理,并且我的模块包含若干个函数指针在每个函数指针里面都要作类似的处理。若按通常做法會写出如下代码:
           break;
       ......
           break;

 如果按照这种方法写下去,那么在我的每一个函数指針里面都必须作如此多的判断,写出的代码肯定很长并且每一次处理,都要作许多次判断之后才找到正确的处理函数指针代码的执荇效率也不高。针对上述问题我想到了用函数指针指针数组的方法解决这个问题。

  函数指针指针的概念在潭浩强先生的C语言程序設计这本经典的教程中提及过,在大多数情况下我们使用不到也忽略了它的存在。函数指针名实际上也是一种指针指向函数指针的入ロ地址,但它又不同于普通的如int*、double*指针看下面的例子来理解函数指针指针的概念:

  当然从上述例子看不出函数指针指针的优点,目嘚主要是想引出函数指针指针数组的概念我们从上面例子可以得知,既然函数指针名可以通过函数指针指针加以保存那们也一定能定義一个数组保存若干个函数指针名,这就是函数指针指针数组正确使用函数指针指针数组的前提条件是,这若干个需要通过函数指针指針数组保存的函数指针必须有相同的输入、输出值  这样,我工作中所面临的问题可以解决如下:

首先定义256个处理函数指针(及其实现)

其佽定义函数指针指针数组,并给数组赋值

  只要2行代码,就完成了256条case语句要做的事减少了编写代码时工作量,将nStreamType作为数组下标直接调用函数指针指针,从代码执行效率上来说也比case语句高。假如多个函数指针中均要作如此处理函数指针指针数组更能体现出它的优勢。

这行代码的意思就是定义了一个函数指针指针answer 含有两个参数返回类型为void

函数指针指针指向某种特定类型声明一个执行函数指针的指针,只需将指针替换函数指针名即可

pf前面有*表示pf是指针右侧是形参列表表示pf指向的是函数指针,函数指针返回类型是int

指针pf 可以指向具体的add 函数指针。pf=add;(前提是pf和add的返回类型相同

 
//第二个形参为函数指针类型会自动转换为指向此类函数指针嘚指针 
 
//等价的声明,显示的将形参定义为指向函数指针的指针 
 



4、返回指向函数指针的指针


 



 
为了实现这个求和功能使用了一个 sum 全局变量,並且 f(int) 是一个全局函数指针


随着 C++ 面向对象的思想的普及和发展,绝大多数的功能都封装在了类中实现模块化编程。那么上述函数指针将被封装成如下形式:


 
函数指针对象是重载了 operator() 的类的一个实例operator() 是函数指针调用运算符。



 
注意!与之前的区别在于重载了 operator() 而不是 f() 函数指针
则该類的对象成了函数指针对象
 
 //sum类的对象成为了函数指针对象
 

  (1)函数指针对象有自己的状态,即它可以携带自己的成员函数指针而且這个函数指针对象在多次调用的过程中它的那些状态是共享的,而函数指针则不能做到这点(除非定义函数指针内部的静态变量或者全局變量)
  (2)函数指针对象有自己的类型,而普通函数指针则没有在使用STL的容器时可以将函数指针对象的类型传递给容器作为参数來实例化相应的模板,从而来定制自己的算法如排序算法。
(3)可以用(而且提倡、建议)函数指针对象来代替函数指针指针 函数指針对象可以在内部修改而不用改动外部接口

我要回帖

更多关于 函数指针 的文章

 

随机推荐