Cocos2d-x回调函数 Lambda表达式
来源:互联网 发布:白菜价是淘宝开的吗 编辑:程序博客网 时间:2024/05/19 06:15
参考http://zh.wikipedia.org/wiki/C%2B%2B11#Lambda.E5.87.BD.E5.BC.8F.E8.88.87.E8.A1.A8.E7.A4.BA.
http://baike.baidu.com/link?url=ip5P-8vQcbMDUkPnCV6BdP0JcSPqk-NfVBdB3-EwS7LL3Y8vUZ_XDMk1C9RVTE2seg8JJ4L2UIdQRqbInxs5iK#3
https://msdn.microsoft.com/zh-cn/magazine/cc163362.aspx
Cocos2d-x的源码里有很多
auto item2 = MenuItemFont::create("--- Go Back ---", [&](Ref *sender) {
static_cast<LayerMultiplex*>(_parent)->switchTo(0);
});
auto item3 = MenuItemSprite::create(spriteNormal, spriteSelected, spriteDisabled, [](Ref *sender) {
log("sprite clicked!");
});
这种类型的代码。
从create函数的函数声明里,我们可以看到【】和【&】这些代码所在的地方是回调函数所在的地方。
其实这是C++11新引入的一种语法,叫做Lambda表达式。
而在C++98中,我们的回调函数是要这么设置的,
boolcompare(
int
&a,
int
&b)//先定义比较函数
{
returna>b;
//降序排序
}
现在又了新增的Lambda语法标准:
我们可以
sort(a, a+n, [](int a, int b){return a > b;});
是不是简洁很多,看了Lambda的好处。下面详细了解下Lambda
C++中,一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。它与普通函数不同的是,lambda必须使用尾置返回来指定返回类型。
由于Lambda的类型是唯一的,不能通过类型名来显式声明对应的对象,但可以利用auto关键字和类型推导:
auto f=[](inta,intb){returna>b;});
我们注意到 Lambda表达式的前面有个[]里面有时有&有时没有,是怎么回事?
[]// 沒有定義任何變數。使用未定義變數會導致錯誤。
[x,&y]// x以傳值方式傳入(預設),y以傳參考方式傳入。
[&] // 任何被使用到的外部變數皆隱式地以參考方式加以引用。[=] // 任何被使用到的外部變數皆隱式地以傳值方式加以引用。[&, x] // x顯示地以傳值方式加以引用。其餘變數以參考方式加以引用。[=, &z] // z顯示地以參考方式加以引用。其餘變數以傳值方式加以引用。
我们注意到 有&的表达式里都引用了外部变量,相反没有引用外部变量的就没有&。
在新的C++14标准中,还支持基于类型推断的泛型表达式.
sort(a,a+n,[](const auto&a,const auto&b){return a>b;});
//降序排序:不依赖a和b的具体类型
好处是:
因为参数类型和函数模板参数一样可以被推导而无需和具体参数类型耦合,有利于重构代码;和使用auto声明变量的作用类似,它也允许避免书写过于复杂的参数类型。特别地,不需要显式指出参数类型使使用高阶函数变得更加容易。
- Cocos2d-x回调函数 Lambda表达式
- cocos2d-x 回调函数
- cocos2d-x 回调函数
- Cocos2d-x 回调函数
- cocos2d-x游戏开发回调函数
- cocos2d-x 回调函数详解
- cocos2d-x 回调函数详解
- cocos2d-x游戏开发 回调函数
- cocos2d-x onEnter回调函数
- cocos2d-x游戏开发回调函数
- Cocos2d-x 细说回调函数
- cocos2d-x的各种回调函数
- cocos2d-x 3.0 回调函数
- cocos2d-x lua 回调函数
- Cocos2d-x 3.0 回调函数
- cocos2d-x游戏开发 回调函数
- cocos2d-x游戏开发回调函数
- cocos2d-x的几个回调函数
- 《Oracle 12c数据库DBA入门指南 》目录
- [案例研究]—superJumper 3.游戏中的物体与主游戏逻辑
- json
- C4653编译警告消除
- sublime_text2搭建C语言开发编译环境
- Cocos2d-x回调函数 Lambda表达式
- 解析JSON对象与字符串之间的相互转换
- ORA-12519,TNS:no appropriate service handler found
- 获取调用当前方法的方法
- 设计模式
- IOS程序打包越狱版本
- 打印网页去掉页眉和页脚
- [每天一个知识点]27-职业生涯-饿了不能吃石头所以吃沙子
- 《你不常用的c#之一》:略谈unsafe