controller.cpp
1 std::function<TestScene*()> callback;//一个是返回值,一个是参数。返回值是TestScene*,参数是()里的东西
1 Controller g_aTestNames[] = { 2 3 // 4 TESTS MUST BE ORDERED ALPHABETICALLY 5 violators will be prosecuted 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 }
如果 lambda 代码块中包含了 return 语句,则该 lambda 表达式的返回类型由 return 语句的返回类型确定。
另外,capture 指定了在可见域范围内 lambda 表达式的代码内可见得外部变量的列表,具体解释如下:
- [a,&b] a变量以值的方式呗捕获,b以引用的方式被捕获。
- [this] 以值的方式捕获 this 指针。
- [&] 以引用的方式捕获所有的外部自动变量。
- [=] 以值的方式捕获所有的外部自动变量。
- [] 不捕获外部的任何变量。
此外,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)); 注意这里没有传进参数就是0咯
CC_CALLBACK_N (摘自:http://my.oschina.net/u/555701/blog/219844)
1 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__)