2011年10月20日星期四

Function Object

Function Object(函数对象)顾名思义,就是用法上类似函数,但语法上来说,仍然是一个对象。
相对于函数指针,Function Object有2个优点:
1. 可以保存状态。作为一个对象,Function Object像普通的对象一样可以通过成员保存状态。
2。可以作为模板参数。

C++中,重载了operator()的类实例化的对象就是一个Function Object
例子:
class Sum { 		int val; 	public: 		Sum(int i) :val(i) { } 		operator int() const { return val; }		// extract value  		int operator()(int i) { return val+=i; }	// application 	};  	void f(vector v) 	{ 		Sum s = 0;	// initial value 0 		s = for_each(v.begin(), v.end(), s);	// gather the sum of all elements 		cout << "the sum is " << s << "\n"; 	 		// or even: 		cout << "the sum is " << for_each(v.begin(), v.end(), Sum(0)) << "\n"; 	} 
}

没有评论:

发表评论