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