C++0x Lambda

Posted by Packy on March 29, 2018

标签(空格分隔): Lambda c++11 c++

在做径向基函数插值(RBF)的过程中,由于三维插值过程中要对Point Class数据进行某一个规则的排序,所以用上了之前Cpp Primer中了解了一点点的Lambda表达式,Python中也遇到过。


lambda函数

名称lambda来自lambda calculus(λ演算),一种定义和应用函数的数学系统。这个系统让您能够使用匿名函数——即无需给函数命名。在C++11中,对于接受函数指针或函数符的函数,可以使用匿名函数定义(lambda)作为其参数。 例如:

 sort(myVec.begin(), myVec.end(), [](const Foo &foo1, const Foo &foo2)
    {   // 排序三:使用 lambda 的方式进行排序,排序的方法和 Foo::decrease 一样
        if (foo1.a > foo2.a)
        {
            return true;
        }
        else if (foo1.a == foo2.a)
        {
            return foo1.b > foo2.b;
        }
        return false;
    }   );
bool f3(int i){ return i % 3 == 0; }  
//f3()对应的lambda为:
[ ](int i) {return i % 3 ==0 ;}

差别有两个:

  1. 使用[]代替了函数名(这就是匿名的由来)
  2. 没有声明返回类型。返回类型相当于使用decltyp根据返回值推断得到的,这里为bool。