闭包函数的参数传递问题

auto removeAllTouchItem = MenuItemFont::create(“Remove All Touch Listeners”, this](Ref* sender){
auto senderItem = static_cast<MenuItemFont*>(sender);
senderItem->setString(“Only Next item could be clicked”);

_eventDispatcher->removeEventListenersForType(EventListener::Type::TOUCH_ONE_BY_ONE);
。。。
this->addChild(menu2);
});

划线二句不太懂。这个sender 是怎么传过来的,怎么可以转化成 MenuItemFont 类型?

没大明白楼主的意思,static_cast不就是强制转换吗:13:

我的意思是, 参数Ref* sender ,事件响应时,什么传给了它?

按我理解的话,所传递的就是Remove All Touch Listeners这个MenuItemFont,其实这是C++ 11 Lambda表达式,楼主有兴趣的话可以去看下这方面的文章。
这篇文章你也可以看看http://www.cocoachina.com/bbs/read.php?tid=195070
最好自己再去另外看下有关C++ 11 Lambda表达式的内容

— Begin quote from ____

引用第3楼abc88798于2015-01-22 11:25发表的 回 2楼(sytpb) 的帖子 :
按我理解的话,所传递的就是Remove All Touch Listeners这个MenuItemFont,其实这是C++ 11 Lambda表达式,楼主有兴趣的话可以去看下这方面的文章。
这篇文章你也可以看看http://www.cocoachina.com/bbs/read.php?tid=195070
最好自己再去另外看下有关C++ 11 Lambda表达式的内容 http://www.cocoachina.com/bbs/job.php?action=topost&tid=282678&pid=1227082

— End quote

值得学习,收藏!!!

另外menu 类的关系

typedef std::function<void(Ref*)> ccMenuCallback;

class CC_DLL MenuItem : public Node

class CC_DLL MenuItemLabel : public MenuItem

class CC_DLL MenuItemFont : public MenuItemLabel

class CC_DLL MenuItemSprite : public MenuItem

class CC_DLL MenuItemImage : public MenuItemSprite