转自--http://blog.csdn.net/snowlyday/article/details/45973379
在很多时候使用cocos2dx开发游戏的时候经常要创建一个连续的序列,比如创建一个连续的动作,而往往在连续的动作结束后需要执行一个函数来
让代码知晓动作执行结束。一般的方法是创建一个回调函数如下所示
这个就是使用回调函数在动作结束的时候让代码知晓动作结束,然而如果在jumpHalf函数中只是仅仅需要一行语句呢??这个样的话写一个函数就有点
浪费了。那么这个时候就可以使用一个lamda表达式。
那么来看一个执行完动作之后删除自身的一个例子。
这个例子是写的一个让飘飞的字体,,在飘出界面的时候自己将自己删除。
在上面的代码中使用到了lamda函数 ::[capture](parameters){body}
capture:需要用到的外部变量,parameters:函数参数;body:函数体
也就是说上面的代码中 [this] 这个this是传入的一个参数,如果没有这个this的参数那么this->removeFrom......就没法使用了。capture 是表示在lamda中需要使用到的
外部变量 比如 上面的代码中如果上述的 lamda要使用key的值,,不将key写在lamda的捕获参数表中是无法使用key的值的,那么我们需要的就是修改代码如下
这个样的话就可以使用到key 的值了。关于捕获变量方面:
C++要求我们在Lambda的捕获子句里显式指定想要捕获的变量,否则无法在函数体里使用这些变量。如果捕获子句里面什么都不写,就不能使用变量值除了显式指定想要捕获的变量,
C++还要求我们指定这些变量的传递方式,可以选择的传递方式有两种:按值传递和按引用传递。像[&odd_count] 这种写法是按引用传递,这种传递方式使得你可以在Lambda的函数体里对odd_count变量进行修改。
相对的,如果变量名字前面没有加上"&"就是按值传递,这些变量在Lambda的函数体里是只读的。
还用上面的括号中的值是空的 代表函数的参数为空。
[](int x, int y) { return x + y; } // 隐式返回类型
同时在使用lanbas中可以传入一个参数相当于一个函数一样。
这样的lamda函数看起来是不是很高级呢??