diff --git a/include/Nazara/Core/Signal.hpp b/include/Nazara/Core/Signal.hpp index 2c1b54231..f0766a268 100644 --- a/include/Nazara/Core/Signal.hpp +++ b/include/Nazara/Core/Signal.hpp @@ -20,6 +20,8 @@ class NzSignal ~NzSignal() = default; void Connect(const Callback& func); + template void Connect(O& object, void (O::*method)(Args...)); + template void Connect(O* object, void (O::*method)(Args...)); void operator()(Args&&... args); diff --git a/include/Nazara/Core/Signal.inl b/include/Nazara/Core/Signal.inl index db6de027f..e9b106483 100644 --- a/include/Nazara/Core/Signal.inl +++ b/include/Nazara/Core/Signal.inl @@ -12,6 +12,26 @@ void NzSignal::Connect(const Callback& func) m_callbacks.push_back(func); } +template +template +void NzSignal::Connect(O& object, void (O::*method) (Args...)) +{ + return Connect([&object, method] (Args&&... args) + { + return (object .* method) (std::forward(args)...); + }); +} + +template +template +void NzSignal::Connect(O* object, void (O::*method)(Args...)) +{ + return Connect([object, method] (Args&&... args) + { + return (object ->* method) (std::forward(args)...); + }); +} + template void NzSignal::operator()(Args&&... args) {