之前在书上看了java使用内部类的方式实现闭包,然后我用c++仿照实现了下,c++没有内部类,所以不得不传入类的指针。这种方式很麻烦,而且没有js的那种类似于静态变量累加的特性,后面发现使用c++ lambda表达式可以达到js的效果。
lambda表达式中的&非常有用,可以让作用域扩展到类内所有成员,包括局部和类成员变量。
这里的b 尽管是一个局部变量,但是在lambda表达式的作用下,它类似于一个静态变量进行累加的特性,这个和js一致。
lambda表达式是c++实现函数式编程的重要特性。
class A
{
public:
auto f()
{
int b = 102;
return [&] { std::cout << b++ << std::endl; };
}
};
int main(int argc, char *argv[])
{
A a;
auto fTest = a.f();
fTest();
fTest();
fTest();
system("pause");
//Sleep(100000);
return 0;
}