Как вы реализуете сигналы и события в C ++? - PullRequest
1 голос
/ 14 июля 2011

Я делаю библиотеку Gui поверх SDL, используя C ++. (Не спрашивайте меня, почему, я просто делаю это, чтобы получить некоторые практические знания, чтобы понять, как создаются библиотеки Gui.) И я хочу создать систему сигнального соединения, такую ​​как gtk + или wxWidgets ...

 g_signal_connect(mybutton,"clicked",gtk_main_quit); //Gtk+

 EVT_MENU(wxID_EXIT,OnQuit); //WxWidgets

Я понимаю, что могу сделать это, используя указатели функций. Но как добавить функции в основной цикл?

Или есть ли лучший способ сделать это?

1 Ответ

7 голосов
/ 14 июля 2011

Самый простой способ - заимствовать его из библиотеки, например boost::signal или boost::signal2.Следующая лучшая вещь - это реализация ваших собственных, но заимствование большинства функций из библиотек, таких как boost::bind (для включения соединений) или использование функций C ++ 0x, которые упростят общее соединение клиентов (std::function / boost::function),

Я бы порекомендовал вам использовать boost и их библиотеку signals2, так как есть много вещей, которые вы можете сделать неправильно и уже решены там.

...