C++ ButtonCallBack Function Typedef & Lamba
-
Hallo zusammen,
folgendes Problem ist bei mir aufgetreten:Ich will in meinem Button einen Funktions-Pointer speichern, der dann ausgeführt wird, wenn der Button ein Event rein-bekommt...
class HUDButton
typedef void(*HUDButtonClickFun) (HUDButton*);
private: HUDButtonClickFun m_clickFun;
void setClickCallback(HUDButtonClickFun fun){ m_clickFun = fun; } void removeClickCallback() { m_clickFun = nullptr; }
void onClick(HUDButton* button){ if (m_clickFun != nullptr) m_clickFun(button); }
Was ich will: capture-Referenzen an ein Lambda übergeben:
HUDButton* button = new HUDButton(); button->setClickCallback( [frame](HUDButton* hudButton) { ... } );
Das Problem dabei ist, durch des typedef kann ich keine capture-Referenzen an ein Lambda übergeben:
button->setClickCallback( [](HUDButton* hudButton) { ... } );
Kann ich das typedef irgendwie abändern, so dass der Lambda Ausdruck akzeptiert wird?
// Edit: statische Maps sind keine Option.Danke im Voraus.
rnholzinger01 :smiling_face_with_open_mouth:
-
Das geht mit einem Funktionszeiger nicht. Du brauchst hier ein std::function<void(HUDButton*)>. Das kann per type erasure unterschiedliche "callables" speichern, z.B. Funktionszeiger oder Lambdas.
-
@mechanics sagte in C++ ButtonCallBack Function Typedef & Lamba:
Das geht mit einem Funktionszeiger nicht. Du brauchst hier ein std::function<void(HUDButton*)>. Das kann per type erasure unterschiedliche "callables" speichern, z.B. Funktionszeiger oder Lambdas.
Okay, vielen Dank. Werde es gleich versuchen.