CallFunc* func = CallFunc::create([&](){this->doAction();});
[函数对象参数]是标识了一个Lambda的开始。
[] 表示没有使用任何对项参数
[=] 表示可以使用Lambda所在所用范围内所有可见的局部变量,包括所在类this,传递方式为值传递
[&] 和[=]使用范围相同,传递方式为引用传递
[this] 可使用Lambda所在类中的所有成员变量
a 将a按照值传递方式传递进来,此时不能修改a,因为默认a为const,想要修改,需要添加修饰符mutable
&a 将a引用传递
a,&b a值传递,b引用传递
=,&a,&b a和b为引用传递,其他为值传递
&,a,b a和b为值传递,其他为引用传递。
Sprite* sp;
CallFunc* func1 = CallFunc::create([&sp](){});
CallFunc* func2 = CallFunc::create([sp](){});
Sprite* sp2;
CallFunc* func3 = CallFunc::create([sp,&sp2](){});
另外,在函数体内,写局部函数,有时候需要带参数的,比如说我想要清理一个array,但是并不需要将clearFunc(Array* array)写成一个public函数,此时只需要这样写:
auto func = [](__Array* &array){
array->removeAllObjects();
array->release();
array = NULL;
};
func(array1);
func(array2);
提醒,参数列表要记得加&,表示传递的是实餐,否则将传递行参,无法对外部变量进行修改。
比如:
int i = 5;
auto func = [](int& d){
d++;
printf("\n%d\n",d);
};
func(i);
此时的i将会是6,可是如果
int i = 5;
auto func = [](int d){
d++;
printf("\n%d\n",d);
};
func(i);
func里面输出的是5,此时的i还是5,不会改变。