Сообщение Re: Обработка сообщений и всё такое от 20.08.2018 2:19
Изменено 20.08.2018 2:22 c-smile
Re: Обработка сообщений и всё такое
Здравствуйте, Marty, Вы писали:
Что-то типа этого:
Только следить чтобы в деструкторе class object он отписывался от всех событий ( unsubscribe(object*p) — оставлен как упражнение для читателя ).
Что-то типа этого:
enum events {
X = 42,
Y = 43,
}
struct subscription {
uint event_id;
object* obj;
std::function<void(uint eid)> 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, Вы писали:
Что-то типа этого:
Только следить чтобы в деструкторе class object он отписывался от всех событий ( unsubscribe(object*p) — оставлен как упражнение для читателя ).
Что-то типа этого:
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) — оставлен как упражнение для читателя ).