template<typename T>
struct EventHandler {
void pushEvent(T& ) {}
};
template<typename... EventHandlers>
struct _EventsHandler;
template<typename EventHandler>
struct _EventsHandler<EventHandler> : EventHandler
{
using EventHandler::pushEvent;
};
template<typename EventHandler, typename... EventHandlers>
struct _EventsHandler<EventHandler, EventHandlers...> : EventHandler, _EventsHandler<EventHandlers...>
{
using EventHandler::pushEvent;
using _EventsHandler<EventHandlers...>::pushEvent;
};
using EventHandlerType = _EventsHandler<EventHandler<int>, EventHandler<float>, EventHandler<char>>;
int main()
{
EventHandlerType test;
int msp = 1;
test.pushEvent(msp);
return 0;
}
dGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IEV2ZW50SGFuZGxlciB7CiAgICB2b2lkIHB1c2hFdmVudChUJiApIHt9Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBFdmVudEhhbmRsZXJzPgpzdHJ1Y3QgX0V2ZW50c0hhbmRsZXI7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBFdmVudEhhbmRsZXI+CnN0cnVjdCBfRXZlbnRzSGFuZGxlcjxFdmVudEhhbmRsZXI+IDogRXZlbnRIYW5kbGVyCnsKICAgIHVzaW5nIEV2ZW50SGFuZGxlcjo6cHVzaEV2ZW50Owp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgRXZlbnRIYW5kbGVyLCB0eXBlbmFtZS4uLiBFdmVudEhhbmRsZXJzPgpzdHJ1Y3QgX0V2ZW50c0hhbmRsZXI8RXZlbnRIYW5kbGVyLCBFdmVudEhhbmRsZXJzLi4uPiA6IEV2ZW50SGFuZGxlciwgX0V2ZW50c0hhbmRsZXI8RXZlbnRIYW5kbGVycy4uLj4KewogICAgdXNpbmcgRXZlbnRIYW5kbGVyOjpwdXNoRXZlbnQ7CiAgICB1c2luZyBfRXZlbnRzSGFuZGxlcjxFdmVudEhhbmRsZXJzLi4uPjo6cHVzaEV2ZW50Owp9OwoKdXNpbmcgRXZlbnRIYW5kbGVyVHlwZSA9IF9FdmVudHNIYW5kbGVyPEV2ZW50SGFuZGxlcjxpbnQ+LCBFdmVudEhhbmRsZXI8ZmxvYXQ+LCBFdmVudEhhbmRsZXI8Y2hhcj4+OwoKaW50IG1haW4oKQp7CiAgICBFdmVudEhhbmRsZXJUeXBlIHRlc3Q7CgogICAgaW50IG1zcCA9IDE7CiAgICB0ZXN0LnB1c2hFdmVudChtc3ApOwoKICAgIHJldHVybiAwOwp9Cg==