В настоящее время я разрабатываю систему событий для своего игрового движка. Я придумал два способа реализовать обработку событий:
1. «Очередь событий»
std::queue<Event*> events;
// ...
while(hasUnhandledEvents())
{
Event e = pollEvent();
// ... handle event
}
2. Функции обратного вызова
void cbfun(const Event &e)
{
// ... handle event
}
// ...
setCallbackFunction(cbfun);
Я не совсем уверен, какая система подходит лучше всего. Я бы предпочел функцию обратного вызова, но проблема, с которой я сталкиваюсь, заключается в том, что функция обратного вызова является частью класса. Я не знаю точно почему, но очень утомительно передавать указатель на функцию ... Я знаю, что могу использовать std :: function, но мне это кажется немного нелегким (из-за заполнителей et c .. .). Должен ли я по-прежнему использовать функцию обратного вызова или рассматривать очередь событий? Что Вы предпочитаете?