From ea3e15d5d38deea40f13485cf910a4e118f9b8b4 Mon Sep 17 00:00:00 2001 From: Lynix Date: Fri, 5 Jun 2015 14:12:36 +0200 Subject: [PATCH] Core/Signal: Add Connect helpers Former-commit-id: aae537bdc764b66735356a1d335be4b468eb9f77 --- include/Nazara/Core/Signal.hpp | 2 ++ include/Nazara/Core/Signal.inl | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) 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) {