谈函数式编程

1. 函数对象

   如果一个类将()运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象。函数对象是一个对象,

   但是使用的形式看起来像函数调用,实际上也执行了函数调用,因而得名。

// 函数对象类
class Average
{
public:
    // 重载()运算符
    double operator()(int a1, int a2, int a3) { return (double)(a1 + a2 + a3) / 3; }
};

int main()
{
    Average average;           // 定义函数对象
    cout << average(3, 2, 3);  // 等价于 cout << average.operator(3, 2, 3);
    return 0;
}

   因为调用形式很像函数,所以称之为函数对象,重载为成员函数的时候,有多少个参数都可以。

2. lambda 表达式

   lambda表达式的大致原理:每当你定义一个 lambda 表达式后,编译器会自动生成一个匿名类(这个类当然重载了()运算符),

   我们称为闭包类型(closure type)。闭包意思就是封闭的函数。

   Lambda 的语法形式如下:

[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}

   [函数对象参数]:

  

未完待续。。。。。。

猜你喜欢

转载自www.cnblogs.com/yanghh/p/12971634.html