Cpp Note3: 函数指针,函数对象,Lambda
update May 3,2018 2:38
Function Pointer
这篇文章 解释了关于 Function Pointer 的问题,简要描述如下:
一个 function 的函数名可以被认为是它的指针;
函数指针的声明方式如下:
int func(int a, int b) { return a + b; } int main() { // 定义function pointer int (*f)(int,int) = func; // 使用 function pointer int res = f(1, 2); // res == 3 return 0; }
Function Object
如在note2中所说,function object 通过重载 operator()
实现类似于一个函数的功能,所以可以被做为function传递。
这篇文章 详细讲了有关内容。另外需要注意,function object 有一个好处,可以通过 struct 中的 field 实现类似闭包的作用。
example:
struct add_x {
add_x(int x) : x(x) {}
int operator()(int y) const { return x + y; }
private:
int x;
};
Lambda Expression
这篇文章 讲的很好。
基本形式:
[]() {}
example:
void func3(std::vector<int>& v) { std::for_each(v.begin(), v.end(), [](int) { /* do something here*/ }); }