如何在C++中实现信号和事件?

App*_*ker 1 c++ signals sdl

我正在使用C++在SDL上创建一个Gui库.(不要问我原因,为了理解Gui库是如何制作的,我只是为了从实践中获得一些知识.)而且我想创建一个像gtk +或wxWidgets这样的信号连接系统......

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

 EVT_MENU(wxID_EXIT,OnQuit); //WxWidgets
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用函数指针来做到这一点.但是如何将这些函数添加到主循环中?

或者有更好的方法吗?

Dav*_*eas 7

最简单的方法是从库中借用它,例如boost::signalboost::signal2.下一个最好的事情是实现自己的,但借用库中的大多数功能boost::bind(如启用连接)或使用C++ 0x功能来简化客户端的通用连接(std::function/ boost::function).

我建议您使用boost和他们的signals2库,因为有很多事情你可以做错,并已在那里解决.

  • boost文档的[文档](http://www.boost.org/doc/libs/1_40_0/doc/html/signals2.html)通常非常好,并且在许多情况下将包含代码示例.你应该从那里开始. (2认同)