#ifndef XNA_CSHARP_EVENTHANDLER_HPP #define XNA_CSHARP_EVENTHANDLER_HPP #include #include namespace xna { struct EventArgs { virtual ~EventArgs() { sender = nullptr; } void** sender = nullptr; }; template struct EventHandler { template using HANDLER_CALLBACK = void(_Ptr::*&)(TEventArgs& args); template void Add(HANDLER_CALLBACK<_Ptr> function, _Ptr* ptr) { using std::placeholders::_1; std::function func = std::bind(function, ptr, _1); funcs.push_back(func); } void operator()(TEventArgs& args) { for (size_t i = 0; i < funcs.size(); ++i) { auto& func = funcs[i]; if (func) func(args); } } private: std::vector> funcs; }; } #endif