1、概念
构造一个闭包:一个匿名函数对象可以捕获作用域内的变量。其完整形式为:
[ captures ] (optional)(c++20) ( params ) specifiers exception attr -> ret requires(optional)(c++20) { body }
2、实例代码
- 一般实现模型,注意包含相应头文件。
// 可以使用如下类来替代lambda表达式
class Module_print {
private:
std::ostream& os;
int m;
public:
// 注意引用必须使用成员列表初始化
Module_print(std::ostream &s, int mm) : os(s), m(mm) { }
// 注意默认情况下lambda无法修改捕获到的变量,故这里加const使其无法修改成员变量
void operator()(int x) const
{
if (x % m == 0) {
os << x << '\n';
}
}
};
// 使用for_each需要包含头文件#include <algorithm>
void print_module_v0(const std::vector<int>& v, std::ostream& os, int m)
{
for_each(begin(v), end(v), [&os, m](int x) {if (x % m == 0) os << x << '\n';