#pragma once #include #include template class Signal { private: typedef std::function delegate_t; typedef std::vector delegates_t; delegates_t delegates; public: void connect(delegate_t functor) { delegates.push_back(functor); } void fire(T& e) const { if (!delegates.empty()) for (auto& delegate : delegates) delegate(e); } };