Здравствуйте, 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) — оставлен как упражнение для читателя ).