Chrysalis - Pattern
Loading...
Searching...
No Matches
BaseObservable.h
Go to the documentation of this file.
1#ifndef CHRYSALIS_BASEOBSERVABLE_H
2#define CHRYSALIS_BASEOBSERVABLE_H
3
4#include <set>
5#include <mutex>
6
11namespace Chrysalis {
12 template<typename T>
14 protected:
15 explicit BaseObservable() = default;
16 virtual ~BaseObservable() = default;
17 public:
18 template<typename... Args, typename... CallArgs>
19 void notify(void(T::*function)(Args...), CallArgs&&... args) const {
20 std::lock_guard lock(mutex_);
21 for (const auto& observer: observers_) {
22 (observer->*function)(std::forward<CallArgs>(args)...);
23 }
24 }
25 void addObserver(T* observer) {
26 std::lock_guard lock(mutex_);
27 observers_.insert(observer);
28 }
29 void removeObserver(T* observer) {
30 std::lock_guard lock(mutex_);
31 observers_.erase(observer);
32 }
33 private:
34 std::set<T*> observers_;
35 mutable std::mutex mutex_;
36 };
37}
39
40#endif //CHRYSALIS_BASEOBSERVABLE_H
virtual ~BaseObservable()=default
void addObserver(T *observer)
Definition BaseObservable.h:25
void removeObserver(T *observer)
Definition BaseObservable.h:29
void notify(void(T::*function)(Args...), CallArgs &&... args) const
Definition BaseObservable.h:19
Definition Argument.h:26
Definition Argument.h:9