2011-07-14 38 views
1

我正在使用C++在SDL之上製作一個Gui庫。 (不要問我爲什麼,我只是通過練習來了解一些知識,以瞭解Gui庫的製作過程。)並且我想製作像gtk +或wxWidgets這樣的信號連接系統...你如何在C++中實現信號和事件?

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

EVT_MENU(wxID_EXIT,OnQuit); //WxWidgets 

我明白我可以使用函數指針來做到這一點。但是,如何將函數添加到主循環?

還有更好的方法來做到這一點嗎?

回答

7

最簡單的方法是從庫中借用它,例如boost::signalboost::signal2。第二個最好的做法是實現自己的功能,但借用大多數庫中的功能,例如boost::bind(啓用連接)或使用C++ 0x功能來簡化客戶端的通用連接(std::function/boost::function)。

我會建議你使用boost和他們的signals2庫,因爲有很多事情你可以做錯了,並且已經在那裏解決了。

+0

謝謝。 (你知道任何地方包含良好的教程/文章/文檔使用它?) – ApprenticeHacker

+2

助推器[http://www.boost.org/doc/libs/1_40_0/doc/html/signals2.html]庫通常相當不錯,在很多情況下都會包含代碼示例。你應該從那裏開始。 –