#pragma once #include #include namespace sp { template void MessageDispatcher::RegisterHandler(const std::shared_ptr& a_Handler) { assert(a_Handler); m_Handlers.push_back(a_Handler); } template void MessageDispatcher::UnregisterHandler(const std::shared_ptr& a_Handler) { auto found = std::find(m_Handlers.begin(), m_Handlers.end(), a_Handler); if (found != m_Handlers.end()) m_Handlers.erase(found); } template void MessageDispatcher::Dispatch(const MessageBase& a_Message) { for (auto& handler : m_Handlers) { a_Message.Dispatch(*handler.lock()); } } } // namespace sp