cocos2d3.10 简单引用lambda表达式用作回调函数
来源:互联网 发布:淘宝小二介入订单关闭 编辑:程序博客网 时间:2024/05/19 22:27
1.匿名函数 出现在 matlab 中。它是matlab中定义的一种函数形式。
2.匿名函数只具备函数体 没有函数名称
因为它只在此处使用 并且不需要在其他地方调用它,那么名称也就没有意义
3.匿名函数不以文件形式驻留在文件夹上;他的生成方式最简捷,可在指令窗或任何函数体内通过指令直接生成。
匿名函数的作用:主要实现自己定义matlab中的函数,从而扩大函数的使用功能
和内联函数(inline)相比,匿名函数的优越性在于可以直接使用workspace中的变量,不必申明,非常适合嵌入到M文件中。
4.lambda表达式
[] () {};
只有三个对符号和一个分号,分号的作用是:
[]符号,表示要开始一个lambda函数;
()符号,填写函数的参数;
{}符号,(存放代码块);
;符号 不解释;
5.动作完成后的回调函数(引用lambda表达式):
bool HelloWorld::init(){ if ( !Layer::init() ) { return false; } //官方默认 auto rootNode = CSLoader::createNode("MainScene.csb"); addChild(rootNode); //1.添加一个精灵 Sprite* runSpr = Sprite::create("CloseNormal.png"); runSpr->setPosition(Vec2(200,100)); addChild(runSpr); //2.给精灵添加一个动作 MoveTo* runSpr_move = MoveTo::create(1.5,Vec2(500, 300)); //3.执行完动作给一个动作回调(用lambda表达式) auto callFunc = [](){ printf("动作执行完了!"); }; CallFunc* func = CallFunc::create(callFunc); //4.动作执行(执行完动作,再执行回调函数) Sequence* runSpr_action = Sequence::create(runSpr_move, func, NULL); runSpr->runAction(runSpr_action);}
6.如果需要该精灵(runSprite)在回调函数内隐藏
需要修改:
//3.执行完动作给一个动作回调(用lambda表达式) auto callFunc = [=](){ //注意这里[]修改为了[=] printf("动作执行完了!"); //隐藏精灵 runSpr->setVisble(false); };
为什么把[]修改为[ = ]:
[]: 不截取任何变量;[&]: 截取外部作用域中所有变量,并作为引用在函数体中使用,可以简单地理解为,只要变量没有被释放,那么在lambda函数中都可以使用。但是局部变量不可以使用,因为局部变量会被释放;[=]: 截取外部作用域中所有变量,并拷贝一份在函数体中使用,即使外部变量的值改变了,但是在lambda函数执行的时候,依旧是复制时的值。[=, &foo]: 截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用[foo]: 截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量[this]: 截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。
为什么不用[&]?
这里创建的精灵是在init()函数内部创建的,属于局部变量。此函数执行完毕,精灵就会被释放掉!
[&]:截取外部作用域中所有变量,并作为引用在函数体中使用。当lambda函数体内,调用该精灵时,就会报错。
0 0
- cocos2d3.10 简单引用lambda表达式用作回调函数
- Cocos2d-x回调函数 Lambda表达式
- lambda回调函数
- 将类成员函数用作C回调函数
- .NET:异步调用长时间工作的方法(采用lambda表达式封装回调函数)
- 新线程的回调函数也可以是有一个Lambda表达式的形式
- 回调函数简单应用
- 回调函数简单说明
- 回调函数简单实践
- 简单的回调函数
- 回调函数简单理解
- 回调函数简单解释
- lambda表达式:方法引用
- 关于回调函数和引用
- 什么是回调函数?回调函数的简单实现。
- Lambda表达式简单使用
- lambda表达式:构造器引用
- Lambda表达式中的引用传递
- 优化OpenSearch的搜索结果
- C++中“Virtual outside class declaration ”解决办法
- MySQL 自定义函数
- RxJava实现异步任务的第三方框架
- [数据结构]基本概念和术语
- cocos2d3.10 简单引用lambda表达式用作回调函数
- Beauty Contest(poj 2187)
- JVM深入学习-Java代码执行篇二-[装载Class ]
- (4.2.36.2)HTTP之OkHttp(二): Okhttp的封装
- MySQL 存储过程
- codevs1408 最长公共子序列
- strace用法说明
- 用document.body.scrollTop总是零的原因
- XML基础