#pragma once #include namespace td { namespace utils { class SlotGuard { private: std::vector> m_Deleters; public: template void Connect(Signal& a_Signal, const typename Signal::CallBack& a_Callback) { a_Signal.Connect(a_Callback); m_Deleters.push_back([&a_Signal, &a_Callback]() { a_Signal.Disconnect(a_Callback); }); } ~SlotGuard() { for (auto& deleter : m_Deleters) { deleter(); } } }; } // namespace utils } // namespace td