写在前面
之前理解了python当中的闭包的概念和使用,虽然对比而言c++不支持函数的嵌套定义但是c++可否也实现闭包的功能呢?
主要内容
闭包有很多种定义,一种说法是,闭包是带有上下文的函数。说白了,就是有状态的函数。更直接一些,不就是个类吗?换了个名字而已。
一个函数, 带上了一个状态, 就变成了闭包了. 什么叫 “带上状态” 呢? 意思是这个闭包有属于自己的变量, 这些个变量的值是创建闭包的时候设置的, 并在调用闭包的时候, 可以访问这些变量.
闭包的状态捆绑, 必须发生在运行时.
C++ 里使用闭包有3个办法:
仿函数,重载(操作符的class)
因为闭包是一个函数+一个状态, 这个状态通过 隐含的 this 指针传入. 所以 闭包必然是一个函数对象. 因为成员变量就是极好的用于保存状态的工具, 因此实现 operator() 运算符重载, 该类的对象就能作为闭包使用. 默认传入的 this 指针提供了访问成员变量的途径.
lambda 表达式
c++11 里提供的 lambda表达式就是很好的语法糖. 其本质和手写的函数对象没有区别.
float round = 0.5;
auto f = [=](float f