diff --git a/include/Nazara/Core/Signal.hpp b/include/Nazara/Core/Signal.hpp index 458fdcff3..2fb65aede 100644 --- a/include/Nazara/Core/Signal.hpp +++ b/include/Nazara/Core/Signal.hpp @@ -66,6 +66,7 @@ class NzSignal::Connection friend BaseClass; public: + Connection() = default; Connection(const Connection& connection) = default; Connection(Connection&& connection) = default; ~Connection() = default; @@ -90,14 +91,19 @@ class NzSignal::ConnectionGuard using Connection = BaseClass::Connection; public: + ConnectionGuard() = default; ConnectionGuard(const Connection& connection); + ConnectionGuard(const ConnectionGuard& connection) = delete; ConnectionGuard(Connection&& connection); + ConnectionGuard(ConnectionGuard&& connection) = default; ~ConnectionGuard(); Connection& GetConnection(); - Connection& operator=(const Connection& connection) = delete; - Connection& operator=(Connection&& connection) = delete; + ConnectionGuard& operator=(const Connection& connection); + ConnectionGuard& operator=(const ConnectionGuard& connection) = delete; + ConnectionGuard& operator=(Connection&& connection); + ConnectionGuard& operator=(ConnectionGuard&& connection); private: Connection m_connection; diff --git a/include/Nazara/Core/Signal.inl b/include/Nazara/Core/Signal.inl index 5135e3c0e..39ca86170 100644 --- a/include/Nazara/Core/Signal.inl +++ b/include/Nazara/Core/Signal.inl @@ -138,4 +138,31 @@ typename NzSignal::Connection& NzSignal::ConnectionGuard::GetC return m_connection; } +template +typename NzSignal::ConnectionGuard& NzSignal::ConnectionGuard::operator=(const Connection& connection) +{ + m_connection.Disconnect(); + m_connection = connection; + + return *this; +} + +template +typename NzSignal::ConnectionGuard& NzSignal::ConnectionGuard::operator=(Connection&& connection) +{ + m_connection.Disconnect(); + m_connection = std::move(connection); + + return *this; +} + +template +typename NzSignal::ConnectionGuard& NzSignal::ConnectionGuard::operator=(ConnectionGuard&& connection) +{ + m_connection.Disconnect(); + m_connection = std::move(connection.m_connection); + + return *this; +} + #include