您的位置:首页 > 编程语言 > C语言/C++

C++函数对象学习笔记

2016-10-16 11:09 330 查看

函数对象

C++似乎越来越希望和C撇清关系,在支持C的各种特性的前提下,又有一些独有的对C的语法实现。函数对象很大程度上和函数指针作用类似,C里有函数指针,相应C++有函数对象,当然,在C++情况下,函数对象肯定略显强大一些。有了函数对象,感觉就算是迈出了函数式编程的第一步了。

用法

只需要重载()就可以了,一个实例

#include <iostream>
using namespace std;
class Func_add
{
public:
template<typename T>
T operator() (T x, T y)
{
return x + y;
}
};

template<typename T>
T invoke(T x, T y, Func_add& func)
{
return func(x, y);
}
int main()
{
Func_add func;
cout << invoke(1, 2, func);
return 0;
}


这里使用template,利用一个invoke来调用func,func重载了()运算符,是一个函数对象,main里先创建了一个函数对象,然后通过invoke来调用。

所以我们可以看到,使用函数对象本身是很简单的,只需要重载括号运算符就可以使一个类是一个函数对象的类。

标准的函数对象

//作为基类
//定义了一元操作的参数类别和返回值类别
template <class Arg, class Result>
struct unary_function {
typedef Arg argument_type;  //内嵌型别技术
typedef Result result_type;
};
//定义了二元操作的参数类别和返回值类别
template <class Arg1, class Arg2, class Result>
struct binary_function {
typedef Arg1 first_argument_type;
typedef Arg2 second_argument_type;
typedef Result result_type;
};

//算术操作符类 : plus(加), minus(减), multiplies(乘), divides(除), modulus(取模), negate(返回负)

//比较函数类 : equal_to(相等), not_equal_to(不相等), greater(大于), less(小于),greater_equal(大于等于),less_equal(小于等于)

//逻辑操作符类 :logical_and(逻辑与) logical_or(逻辑或), logical_not(逻辑非)

//以下内容又被称为函数适配器
//binder:通过将函数的某一个参数bind为确定的值,而使得二元函数变为一元函数,bind1st, bind2nd,分别绑定第一个参数和第二个参数

//否定器,求反器, negator:将函数对象求反,not1返回一元函数对象的反面,not2返回二元函数对象的反面


参考资料

http://blog.csdn.net/chollima/article/details/3525934

http://blog.csdn.net/wuzhekai1985/article/details/6658940
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: