Allow calling Signal::emit() with arguments that aren't exactly the signal handlers types.

This commit is contained in:
Patrick 2025-02-14 22:39:01 +01:00
parent 55fb360dfa
commit 21b3b2c03a

View File

@ -65,7 +65,9 @@ public:
template<typename TObject, typename TWeak = void>
inline token_t connect(TObject& object, void (TObject::* handler)(TArgs...), Oneshot oneshot = Oneshot::NO, std::weak_ptr<TWeak> referenced = std::weak_ptr<TWeak>()) MIJIN_NOEXCEPT;
inline void disconnect(token_t token) MIJIN_NOEXCEPT;
inline void emit(TArgs&&... args) MIJIN_NOEXCEPT;
template<typename... TArgs2>
inline void emit(TArgs2&&... args) MIJIN_NOEXCEPT;
};
//
@ -122,7 +124,8 @@ inline void Signal<TArgs...>::disconnect(token_t token) MIJIN_NOEXCEPT
}
template<typename... TArgs>
inline void Signal<TArgs...>::emit(TArgs&&... args) MIJIN_NOEXCEPT
template<typename... TArgs2>
inline void Signal<TArgs...>::emit(TArgs2&&... args) MIJIN_NOEXCEPT
{
std::lock_guard lock(handlersMutex_);
@ -137,7 +140,7 @@ inline void Signal<TArgs...>::emit(TArgs&&... args) MIJIN_NOEXCEPT
// invoke all handlers
for (RegisteredHandler& handler : handlers_)
{
handler.callable(std::forward<TArgs>(args)...);
handler.callable(std::forward<TArgs2>(args)...);
}
// remove any oneshot