#pragma once template class event { using func_type = std::function; std::mutex event_lock; std::vector m_funcs; public: void add(const func_type& func) { std::lock_guard lock(event_lock); m_funcs.emplace_back(func); } void call(Args... params) { std::lock_guard lock(event_lock); for (auto& func : m_funcs) { if (func) func(std::forward(params)...); } } };