函数指针的作用

 转自: http://bbs.lzjtu.edu.cn/bbsanc.php?path=%2Fgroups%2Fsci.faq%2FComputer%2FProgramOld%2FVC%2F9%2F1%2F54.txt

 

函数指针的作用:
    一是用来做为一种泛型算法的比较策略。最常见的就是排序算法,由于你不能事先知
道被排序对象的类型,就不能简单地用’<’或者’>’来判断其大小,这时就需要调用者
在调用时指定比较标准,在C语言中,这就是通过函数指针来实现的。看C的标准库函数qs
ort:
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(cons
t void *elem1, const void *elem2 ) );
最后一个参数compare就是用来指定如何比较elem1和elem2的大小。但是在C++中,由于

引入了类,这时的比较标准就不再仅仅由函数指针来指定了,还可以用一个类的对象。再

C++标准库中的sort:
template<class RanIt, class Pred>
      void sort(RanIt first, RanIt last, Pred pr);
最后一个参数Pred指定了比较的标准。它可以是一个函数指针,也可以是一个类,这个类
需要提供一个operator( )操作:
class compare{
public:
int operator()(const some_type& t1,const some_type& t2)const
{    return t1>t2;   }     //or some other compare criteria
};
这样,compare pr;  pr(t1,t2);就可以返回t1与t2的比较结果,其形式与pr是函数指针
时 一样的。但用类有一个明显的好处:operator()可以是内联函数,在比较过程就可以省
去很多函数调用的开销。

   函数指针的第二种用途是作为输入/输出流的格式控件符。像我们经常用的cout<<x<<f
lush<<y<<flush;这里flush其实就是一个函数指针:
ostream& flush(ostream& s){     //这里只是说明一上大致如何实现,真正的版本是用

   return s.flush();              //板来实现的 
}
ostream类定义了operator<<来接受这个函数指针参数:
class ostream{
    ……………
public:
   ostream& operator<<(ostream&  (*f)(ostream&))  {   return f(*this);    }

}; 
   函数指针的第三种用途涉及DLL。当你在运行期间用LoadLibrary动态加载一个DLL时,
需要用GetProcAddress来得到需要调用的函数的地址,这就是一个函数指针。

   另外,在MFC中,每个类的消息处理函数都是以函数指针的形式保存在一个私有的_mes
ssageEntry数组中。在需要某个处理消息时,就遍历各个类的_messageEntry数组,看有没
有对应于这个消息的结点,如果有就取出对应的函数指针来调用消息处理函数。
   
   一时只能想到这么多了,还是让我们等着看小李子的大作吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值