diff Framework/Messages/IObservable.h @ 1064:af4b9cba905f broker

simplify how observers are regsitered, and how callables are created
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 15 Oct 2019 13:46:01 +0200
parents e713f1a99861
children 9d42f89b8c3c
line wrap: on
line diff
--- a/Framework/Messages/IObservable.h	Tue Oct 15 12:22:44 2019 +0200
+++ b/Framework/Messages/IObservable.h	Tue Oct 15 13:46:01 2019 +0200
@@ -44,12 +44,12 @@
     void EmitMessageInternal(const IObserver* receiver,
                              const IMessage& message);
 
+    // Takes ownsership of the callable
+    void RegisterObserverCallback(ICallable* callable);
+
   public:
     virtual ~IObservable();
 
-    // Takes ownsership
-    void RegisterObserverCallback(ICallable* callable);
-
     // TODO - Remove this?
     void Unregister(IObserver* observer);
 
@@ -60,5 +60,13 @@
 
     // Takes ownsership
     void RegisterForwarder(IMessageForwarder* forwarder);
+
+    template<typename TObserver,
+             typename TMessage>
+    void RegisterObserver(TObserver& observer,
+                          void (TObserver::* MemberMethod) (const TMessage&))
+    {
+      RegisterObserverCallback(new Callable<TObserver, TMessage>(observer.GetSharedObserver(), MemberMethod));
+    }
   };
 }