2017-03-14 2 views
1

So bemerke ich die Ref* pSender erscheint in vielen Rückruf-Funktion und ich frage mich in der folgenden Code:Was macht "Ref * pSender" in der Rückruffunktion?

1) Was ist das?

2) Wo kommt es her? Ich habe es nicht außerhalb des Lambda definiert.

3) Was sind einige Verwendungen davon?

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); 
    }); 

Ihre Aufmerksamkeit und Hilfe sehr geschätzt wird :)

Antwort

1

1) Was ist das?

Es ist der Punkt, der die Lambda-Funktion ausgelöst hat. In Ihrem Fall, Ihre mFamilyTV.

2) Woher kommt es? Ich habe es nicht außerhalb des Lambda definiert.

Die Einheit Ausführung der Lambda später wird es passieren.

3) Was nützt es?

Sie können die gleiche Funktion an mehrere Instanzen anhängen und wissen immer noch, welche Instanz sie ausgelöst hat. Nehmen wir an, Sie hätten einen Lambda, um den Hintergrund bei einem Klick auf Rot zu setzen. Sie könnten es bis zu 15 Tasten legen und wenn Sie es richtig programmiert (in diesem Fall die Farbe der pSender anstelle von benannten Tasten zu ändern), es funktioniert für alle 15. Und jede Menge andere, auch wenn Sie nicht einmal wissen, sie zur Kompilierzeit und haben keine Variablennamen für sie in Ihrem Programm.

+0

Dann könnte ich spare den 'pSender' für die spätere Verwendung (das heißt auf andere Tasten in Ihrem Beispiel befestigen) in einem anderen Lambda, während eine andere Taste zu schaffen, oder es wird, sobald die oben Lambda endet freigegeben/gelöscht werden? Wenn ja, könnten Sie mir bitte beibringen, wie es geht? Danke im Voraus. –

+1

Sie sollten es nicht außerhalb des Lambda-Ausdrucks verwenden, da es keine Garantie gibt, was mit dem Lambda-Ausdruck passiert. Wenn Sie denken, dass Sie es brauchen, können Sie eine andere Frage stellen, da Sie diese nicht außerhalb des Lambda-Ausdrucks verwenden sollten. Dafür ist Ihre aktuelle Variable mFamilyTV da. – nvoigt