Информация об изменениях

Сообщение Re: Обработка сообщений и всё такое от 20.08.2018 2:19

Изменено 20.08.2018 2:22 c-smile

Re: Обработка сообщений и всё такое
Здравствуйте, 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(ev_id); } };
  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) — оставлен как упражнение для читателя ).
Re: Обработка сообщений и всё такое
Здравствуйте, 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) — оставлен как упражнение для читателя ).