Re: Обработка сообщений и всё такое
От: c-smile Канада http://terrainformatica.com
Дата: 20.08.18 02:19
Оценка:
Здравствуйте, Marty, Вы писали:

Что-то типа этого:

enum events {
  X = 42,
  Y = 43,
}

struct subscription {
  uint    event_id;
  object* obj;
  std::function<void()> callback;
};

std::list<subscription> g_subscriptions;

void subscribe_to_x_event(object* p) {
  subscription sub = { X, p, [=]() { p->on_x_event(); } };
  g_subscriptions.push_back(sub);
}

void dispatch_event(uint ev_id) {
  for(subscription sub : g_subscriptions) {
    if( sub.event_id == ev_id)
      callback();
  }
}


Только следить чтобы в деструкторе class object он отписывался от всех событий ( unsubscribe(object*p) — оставлен как упражнение для читателя ).
Отредактировано 20.08.2018 2:22 c-smile . Предыдущая версия . Еще …
Отредактировано 20.08.2018 2:22 c-smile . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.