用函数对象取代函数指针
2008-02-23 05:28:38来源:互联网 阅读 ()
传递函数指针是事件驱动系统中通常的惯例,籍此回调例程通过指针来调用。但是,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
}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: C 中多态的三种实现形式
下一篇: 在C 中怎么让函数接收不定数量的参数
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
