diff --git a/include/Nazara/Core/Signal.hpp b/include/Nazara/Core/Signal.hpp index bcb1d4be8..8440a6602 100644 --- a/include/Nazara/Core/Signal.hpp +++ b/include/Nazara/Core/Signal.hpp @@ -37,6 +37,8 @@ class NzSignal Connection Connect(Callback&& func); template Connection Connect(O& object, void (O::*method)(Args...)); template Connection Connect(O* object, void (O::*method)(Args...)); + template Connection Connect(const O& object, void (O::*method)(Args...) const); + template Connection Connect(const O* object, void (O::*method)(Args...) const); void operator()(Args... args) const; diff --git a/include/Nazara/Core/Signal.inl b/include/Nazara/Core/Signal.inl index 45fd740d8..e915bd0dc 100644 --- a/include/Nazara/Core/Signal.inl +++ b/include/Nazara/Core/Signal.inl @@ -58,6 +58,26 @@ typename NzSignal::Connection NzSignal::Connect(O* object, voi }); } +template +template +typename NzSignal::Connection NzSignal::Connect(const O& object, void (O::*method) (Args...) const) +{ + return Connect([&object, method] (Args&&... args) + { + return (object .* method) (std::forward(args)...); + }); +} + +template +template +typename NzSignal::Connection NzSignal::Connect(const O* object, void (O::*method)(Args...) const) +{ + return Connect([object, method] (Args&&... args) + { + return (object ->* method) (std::forward(args)...); + }); +} + template void NzSignal::operator()(Args... args) const {