C++11 cocos2d-x使用c++;11兰姆达

C++11 cocos2d-x使用c++;11兰姆达,c++11,cocos2d-x,C++11,Cocos2d X,有时回调的使用非常有限,这使得它适合作为成员函数。因此,在这些时候,我总是希望将事件回调编写为lambda函数,因为使用受到限制。如果使用lambda编写,则代码块是紧凑的 但是这个回调通常是由成员函数定义的,并且有接口限制 我想知道是否有可能在lambda函数中重写回调 pMenuOK->setTarget(this,menu_selector(PlayerLayer::onPlayed)); void PlayerLayer::onPlayed(cocos2d::CCObject

有时回调的使用非常有限,这使得它适合作为成员函数。因此,在这些时候,我总是希望将事件回调编写为lambda函数,因为使用受到限制。如果使用lambda编写,则代码块是紧凑的

但是这个回调通常是由成员函数定义的,并且有接口限制

我想知道是否有可能在lambda函数中重写回调

 pMenuOK->setTarget(this,menu_selector(PlayerLayer::onPlayed));
 void PlayerLayer::onPlayed(cocos2d::CCObject *pSender);

我认为这是不可能的。Cocos2d-x调用它们的方式是将指向
CCObject
的目标指针与方法指针结合使用。因此,目标必须是
cObject
。正如您所说,这些是为不同类型的参数定义的。Cocos2d-x需要更改以支持此功能。

任何接受CCCallFunc[1]或其子类的方法都可以。创建自己的CCCallFunc子类,该子类保留std::function并重写execute方法和其他一些方法(从CCCallFunc源代码中找出需要的实现)


[1]

对于不带参数的简单CCCallFunc回调,您可能需要签出
.

是的,但这只是为了在对象上运行操作。我向MCBCallLambda提交了一个文件,以便它可以针对Android NDK r9d进行编译。