C++函数对象学习笔记

函数对象

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返回二元函数对象的反面

参考资料

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值