67 template<
class Sender,
class EventArgs>
77 size_t getAddress(std::function<
void(Sender &, EventArgs &)> f) {
78 typedef void (fnType)(Sender &, EventArgs &);
79 fnType **fnPointer = f.template target<fnType *>();
80 if (fnPointer == NULL)
return 0;
81 return (
size_t) *fnPointer;
85 void operator+=(
function<
void(Sender &sender, EventArgs &e)> handler) {
86 handlers.push_back(handler);
89 void operator-=(
function<
void(Sender &sender, EventArgs &e)> handler) {
90 int handlerAddress = getAddress(handler);
91 if (handlerAddress == 0)
97 for (
int i = 0; i < handlers.size(); i++) {
98 if (handlerAddress == getAddress(handlers[i])) {
104 handlers.erase(handlers.begin() + idx);
106 cerr <<
"Couldn't find an event handler to remove. Check your method's signature.";
110 vector<function<void(Sender &sender, EventArgs &e)>> handlers;
112 void invoke(EventArgs arg) {
113 for (
auto pin1inputHandler : handlers) {
114 pin1inputHandler(sender, arg);
size_t getAddress(std::function< void(Sender &, EventArgs &)> f)
Definition: Event.h:77
Provides a simple C#-style observer pattern event queue.
Definition: Event.h:68
void operator-=(function< void(Sender &sender, EventArgs &e)> handler)
Definition: Event.h:89
void operator+=(function< void(Sender &sender, EventArgs &e)> handler)
Subscribe to an event.
Definition: Event.h:85