controller.cpp
1 Controller g_aTestNames[] = { 2 3 @H_301_6@// 4 @H_301_6@ TESTS MUST BE ORDERED ALPHABETICALLY 5 @H_301_6@ violators will be prosecuted 6 @H_301_6@// 7 { "ActionManager",[](){return new ActionManagerTestScene(); } },
这里是lambda的语法。
C++11 的 lambda 表达式规范如下:
- [ capture ] ( params ) mutable exception attribute -> ret { body }
- [ capture ] ( params ) -> ret { body }
- [ capture ] ( params ) { body }
- [ capture ] { body } @H_404_71@
- [a,&b] a变量以值的方式呗捕获,b以引用的方式被捕获。
- [this] 以值的方式捕获 this 指针。
- [&] 以引用的方式捕获所有的外部自动变量。
- [=] 以值的方式捕获所有的外部自动变量。
- [] 不捕获外部的任何变量。 @H_404_71@
如果 lambda 代码块中包含了 return 语句,则该 lambda 表达式的返回类型由 return 语句的返回类型确定。
另外,capture 指定了在可见域范围内 lambda 表达式的代码内可见得外部变量的列表,具体解释如下:
此外,params 指定 lambda 表达式的参数。
ActionManagerTest.cpp
1 grossini->runAction( Sequence::create(
2 MoveBy::create(1,Vec2(150,0)),3 CallFuncN::create(CC_CALLBACK_1(LogicTest::bugMe,this)),128)">4 nullptr)
5 );
1 auto pCallback = CallFunc::create(CC_CALLBACK_0(StopActionTest::stopAction,255)">this)); @H_301_6@ 注意这里没有传进参数就是0咯
CC_CALLBACK_N (摘自:http://my.oschina.net/u/555701/blog/219844)
1 @H_301_6@ new callbacks based on C++11
2 #define CC_CALLBACK_0(__selector__,__target__,...) std::bind(&__selector__,##__VA_ARGS__)
3 #define CC_CALLBACK_1(__selector__,std::placeholders::_1,128)">4 #define CC_CALCC_CALLBACK_1(HelloWorld::menuCloseCallback,this)LBACK_2(__selector__,std::placeholders::_2,128)">5 #define CC_CALLBACK_3(__selector__,std::placeholders::_3 ##__VA_ARGS__)