设为首页 加入收藏 繁体中文
当前位置:技术文摘首页 >> 程序设计 >> C++语言 >> 用函数对象取代函数指针
用函数对象取代函数指针
2008-11-14 18:05:59  作者:  来源:互联网  浏览次数:24  文字大小:【】【】【
  •    传递函数指针是事件驱动系统中通常的惯例,籍此回调例程通过指针来调用。但是,C++提供了另外一种可供选择的更好的办法,就是函数对象,利用它可以避免使用函数指针。
      传递函数指针是事件驱动系统中通常的惯例,籍此回调例程通过指针来调用。但是,C++提供了另外一种可供选择的更好的办法,就是函数对象,利用它可以避免使用函数指针。这样做有几个优点。首先,代码更有弹性,可伸缩性更好,因为修改了包含此函数的对象后,不影响其用户。此外,编译器可以内联函数对象,从而进一步增强性能。有关此问题存在很多争论,大多数都倾向于函数对象。函数对象可以具体表达依赖成员模板的通用算法,这些算法借助普通的函数指针难以完成。在下面的例子中,我用函数对象实现了一个通用的 Negation 算法操作:

#include <iostream>
#include <vector>
using namespace std;

class negate {
  public : template < class T > T operator()  (T t) const { return -t;} // 定义通用的 negation 操作
};
void callback(int n, const negate& neg) { //传递一个函数对象,而不是函数指针
  n = neg(n);  // 调用重载的 () 操作 来对 n 进行 negate 操作
  cout << n;
}
void main()
{
callback(5, negate() ); // 输出 -5
}

0

顶一下

0

踩一下
相关文章
友情链接 | 诚聘英才 | 关于我们 | 版权声明 | 联系我们 | 广告服务

  • 〖 颖思设计 ☆ WinYes.COM 〗
  • 在线咨询:   
  •     粤ICP备05002304号