C++ 什么是;参考*pSender“;你在回拨功能中做什么?

C++ 什么是;参考*pSender“;你在回拨功能中做什么?,c++,event-handling,cocos2d-x,C++,Event Handling,Cocos2d X,因此我注意到Ref*pSender出现在许多回调函数中,我想知道下面的代码: 1) 这是什么 2) 它来自哪里?我没有在lambda之外定义它 3) 它有什么用途 mFamilyTV = MenuItemImage::create("en_block5.png", "en_block5_hover.png", [=](Ref* pSender) { auto jump = JumpBy::create(1.0, Vec2(0, 0), 100, 1);

因此我注意到
Ref*pSender
出现在许多回调函数中,我想知道下面的代码:

1) 这是什么

2) 它来自哪里?我没有在lambda之外定义它

3) 它有什么用途

mFamilyTV = MenuItemImage::create("en_block5.png", "en_block5_hover.png",
        [=](Ref* pSender) {
        auto jump = JumpBy::create(1.0, Vec2(0, 0), 100, 1);
        mFamilyTV->runAction(jump);
    });

非常感谢您的关注和帮助:)

在您的情况下,
Ref*pSender
is
mFamilyTV
。它是一个发送者,触发了菜单项单击
Ref
是支持自动释放功能的一个非常基本的类。您可以将其投射回MenuItemImage

在这里,您可以查看
MenuItemImage
的继承图:

1) 这是什么

它是触发lambda函数的项目。在您的情况下,您的
mFamilyTV

2) 它来自哪里?我没有在lambda之外定义它

稍后执行lambda的单元将通过它

3) 它有什么用途

mFamilyTV = MenuItemImage::create("en_block5.png", "en_block5_hover.png",
        [=](Ref* pSender) {
        auto jump = JumpBy::create(1.0, Vec2(0, 0), 100, 1);
        mFamilyTV->runAction(jump);
    });

它使您能够将同一函数附加到多个实例,并且仍然知道是哪个实例触发了该函数。让我们假设您有一个lambda,可以通过单击按钮将背景设置为红色。您可以将其附加到15个按钮上,如果编程正确(在本例中,更改
pSender
的颜色而不是命名按钮),则它适用于所有15个按钮。以及任何数量的其他按钮,即使您在编译时不知道它们,并且在程序中也没有它们的变量名。

那么我可以保存
pSender
以供以后使用(即附加到示例中的其他按钮上)在另一个lambda中创建另一个按钮,还是在上述lambda结束后立即释放/删除?如果是的话,你能教我怎么做吗?高级感谢。您不应该在lambda表达式之外使用它,因为无法保证它会发生什么。如果您认为您需要它,您可能想问另一个问题,因为您不需要在lambda表达式之外使用它。这就是实际变量mFamilyTV的用途。