#include <iostream>
#include <vector>
class EventListener
{
public:
void test(int n)
{
std::cout << "n is: " << n << std::endl;
}
};
typedef void (EventListener::*ftOnEventClass)(int n);
struct EventNode
{
ftOnEventClass functionClass;
EventListener* handle;
};
int main()
{
std::vector<EventNode *> m_vEventHandlerList;
EventListener el;
EventNode en = { &EventListener::test, &el};
m_vEventHandlerList.push_back(&en);
for (auto& iter : m_vEventHandlerList)
{
if (iter->handle != nullptr)
{
(iter->handle->*iter->functionClass)(123);
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKCmNsYXNzIEV2ZW50TGlzdGVuZXIKewpwdWJsaWM6Cgl2b2lkIHRlc3QoaW50IG4pCgl7CgkJc3RkOjpjb3V0IDw8ICJuIGlzOiAiIDw8IG4gPDwgc3RkOjplbmRsOwoJfQp9OwoKdHlwZWRlZiB2b2lkIChFdmVudExpc3RlbmVyOjoqZnRPbkV2ZW50Q2xhc3MpKGludCBuKTsKCnN0cnVjdCBFdmVudE5vZGUKewoJZnRPbkV2ZW50Q2xhc3MgZnVuY3Rpb25DbGFzczsKCUV2ZW50TGlzdGVuZXIqIGhhbmRsZTsKfTsKCgppbnQgbWFpbigpCnsKCXN0ZDo6dmVjdG9yPEV2ZW50Tm9kZSAqPiBtX3ZFdmVudEhhbmRsZXJMaXN0OwoJRXZlbnRMaXN0ZW5lciBlbDsKCUV2ZW50Tm9kZSBlbiA9IHsgJkV2ZW50TGlzdGVuZXI6OnRlc3QsICZlbH07CgltX3ZFdmVudEhhbmRsZXJMaXN0LnB1c2hfYmFjaygmZW4pOwoKCWZvciAoYXV0byYgaXRlciA6IG1fdkV2ZW50SGFuZGxlckxpc3QpCgl7CgkJaWYgKGl0ZXItPmhhbmRsZSAhPSBudWxscHRyKQoJCXsKCQkJKGl0ZXItPmhhbmRsZS0+Kml0ZXItPmZ1bmN0aW9uQ2xhc3MpKDEyMyk7CgkJfQoJfQp9