Mercurial > hg > orthanc-stone
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)); + } }; }