MVC  0.0.1
observable.h
См. документацию.
1 #pragma once
2 
3 #include "iview.h"
4 #include <list>
5 #include <memory>
6 
10 class Observable {
11 public:
12 
13  Observable() = default;
14  virtual ~Observable() = default;
15 
16  void subscribe(IViewSptr in_observer) noexcept {
17  observers.push_back(in_observer);
18  }
19 
20  void unsubscribe(IViewSptr in_observer) noexcept {
21  observers.remove_if([in_observer](std::weak_ptr<IView> &obs) {
22  return obs.expired() || obs.lock() == in_observer;
23  });
24  }
25 
26  void notifyUpdate() noexcept {
27  for (auto &obs : observers) {
28 
29  if (auto sptr = obs.lock())
30  sptr->update();
31 
32  }
33  }
34 
35 private:
36  std::list<std::weak_ptr<IView>> observers;
37 };
iview.h
Observable::subscribe
void subscribe(IViewSptr in_observer) noexcept
Definition: observable.h:16
Observable
Here is doing monitoring.
Definition: observable.h:10
Observable::notifyUpdate
void notifyUpdate() noexcept
Definition: observable.h:26
Observable::Observable
Observable()=default
Observable::~Observable
virtual ~Observable()=default
IViewSptr
std::shared_ptr< IView > IViewSptr
Definition: iview.h:20
Observable::unsubscribe
void unsubscribe(IViewSptr in_observer) noexcept
Definition: observable.h:20