函数对象:有那么一个类,它重载了圆括号运算符“()”,用这个类创建了一个对象,当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象,又名仿函数。
你可能需要先了解函数指针:http://blog.csdn.net/u013600225/article/details/50190043
例子:
int add(int a, int b){ return a + b; }
//定义一个"函数对象"类
class MyFunObject
{
typedef int(*fun_ptr)(int, int);//定义了一个函数指针类型为fun_ptr。
public:
MyFunObject(fun_ptr fun, int arg1, int arg2) :ad_fun_ptr(fun), arg1(arg1), arg2(arg2){}
public:
int operator() (/*void*/)
{
return ad_fun_ptr(arg1, arg2);
}
int operator__()
{
return this->operator()(/*void*/);
//return this->ad_fun_ptr(arg1, arg2);
}
private:
fun_ptr ad_fun_ptr;
int arg1;
int arg2;
};
int main()
{
int ret_val = 0;
MyFunObject obj(add, 3, 5);
ret_val = obj();//就好像调用了一个普通函数,函数名为obj。
ret_val = obj.operator()(/*void*/);
ret_val = obj.operator__(/*void*/);
return 0;
}
完。