传递函数指针是事件驱动系统中通常的惯例,籍此回调例程通过指针来调用。但是,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
}
-
近期文章
近期评论
- coolker 发表在《打造最快的Hash表》
- struggle 发表在《提供C语言教学课件(适用于初学者)》
- zhanghaibo 发表在《提供C语言教学课件(适用于初学者)》
- zhanghaibo 发表在《提供C语言教学课件(适用于初学者)》
- diys 发表在《C语言编程宝典(王大刚) 1.1 C 语言的产生与发展》
文章归档
- 2022 年十月
- 2014 年一月
- 2013 年十二月
- 2012 年十一月
- 2012 年七月
- 2012 年六月
- 2012 年五月
- 2012 年四月
- 2012 年三月
- 2012 年二月
- 2011 年十二月
- 2011 年十月
- 2011 年九月
- 2011 年八月
- 2011 年七月
- 2011 年六月
- 2011 年五月
- 2011 年四月
- 2011 年三月
- 2011 年二月
- 2011 年一月
- 2010 年十二月
- 2010 年十一月
- 2010 年十月
- 2010 年九月
- 2010 年八月
- 2010 年七月
- 2010 年六月
- 2010 年五月
- 2010 年四月
- 2010 年三月
- 2010 年二月
- 2010 年一月
- 2009 年十二月
- 2009 年十一月
- 2009 年十月
- 2009 年九月
- 2009 年八月
- 2009 年七月
- 2009 年六月
- 2009 年五月
- 2009 年四月
- 2009 年三月
- 2009 年二月
- 2009 年一月
- 2008 年十二月
- 2008 年十一月
- 2008 年十月
- 2008 年九月
- 2008 年八月
- 2008 年七月
- 2008 年六月
- 2008 年五月
- 2008 年四月
- 2008 年三月
- 2008 年二月
- 2008 年一月
- 2007 年十二月
- 2007 年十一月
- 2007 年十月
- 2007 年九月
- 2007 年八月
- 2007 年七月
- 2007 年六月
- 2007 年三月
- 2007 年二月
- 2007 年一月
- 2006 年十二月
- 2006 年十一月
- 2006 年十月
- 2006 年九月
- 2006 年八月
- 2006 年七月
- 2006 年六月
- 2006 年五月
- 2006 年四月
- 2006 年三月
- 2006 年二月
- 2006 年一月
- 2005 年十二月
- 2005 年十一月
分类目录
功能