#include <iostream>
#include <functional>
class Button
{
public:
// Typedef of the event function signature
typedef std::function<void(Button*)> EventCallback;
Button() : onClick(nullptr) {}
// Set the function to call
void SetOnClick(EventCallback func) { onClick = func; }
// Call the function if exists
void OnClick() {
if (onClick)
onClick(this);
}
private:
// This stores the function pointer for the button
EventCallback onClick;
};
// just some example function that has the same signature as Button::EventCallback
void MyEventFunc(Button* button)
{
std::cout << "Triggered" << std::endl;
}
int main() {
Button button;
button.SetOnClick(&MyEventFunc);
button.OnClick();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIEJ1dHRvbgp7CnB1YmxpYzoKCS8vIFR5cGVkZWYgb2YgdGhlIGV2ZW50IGZ1bmN0aW9uIHNpZ25hdHVyZQoJdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoQnV0dG9uKik+IEV2ZW50Q2FsbGJhY2s7CgkKICAgIEJ1dHRvbigpIDogb25DbGljayhudWxscHRyKSB7fQoJCgkvLyBTZXQgdGhlIGZ1bmN0aW9uIHRvIGNhbGwKCXZvaWQgU2V0T25DbGljayhFdmVudENhbGxiYWNrIGZ1bmMpIHsgb25DbGljayA9IGZ1bmM7IH0KCS8vIENhbGwgdGhlIGZ1bmN0aW9uIGlmIGV4aXN0cwoJdm9pZCBPbkNsaWNrKCkgewoJCWlmIChvbkNsaWNrKQoJCQlvbkNsaWNrKHRoaXMpOwoJfQoJCnByaXZhdGU6CgkvLyBUaGlzIHN0b3JlcyB0aGUgZnVuY3Rpb24gcG9pbnRlciBmb3IgdGhlIGJ1dHRvbgoJRXZlbnRDYWxsYmFjayBvbkNsaWNrOwp9OwoKLy8ganVzdCBzb21lIGV4YW1wbGUgZnVuY3Rpb24gdGhhdCBoYXMgdGhlIHNhbWUgc2lnbmF0dXJlIGFzIEJ1dHRvbjo6RXZlbnRDYWxsYmFjawp2b2lkIE15RXZlbnRGdW5jKEJ1dHRvbiogYnV0dG9uKQp7CglzdGQ6OmNvdXQgPDwgIlRyaWdnZXJlZCIgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpIHsKCUJ1dHRvbiBidXR0b247CglidXR0b24uU2V0T25DbGljaygmTXlFdmVudEZ1bmMpOwoJYnV0dG9uLk9uQ2xpY2soKTsKCXJldHVybiAwOwp9