
https://github.com/libsigcplusplus/libsigcplusplus#include iostream /* ////在sigslot.h的420,将 //typedef sender_set::const_iterator const_iterator; ////改为 //typedef typename sender_set::const_iterator const_iterator; #include sigslot.h using namespace sigslot; //必须加上sigslot的命名空间 //在用vs调试时还需要将sigslot.h中很多的自定义模板结构类型前加typename const int TTRUE 1; const int TFALSE 0; class Switch { public: signal0 Clicked; //这里的信号是不带参数的signaln表示带几个参数 }; class Light : public has_slots { public: Light(bool state) { b_state state; Displaystate(); } void ToggleState() { b_state !b_state; Displaystate(); } //作为消息的响应 void TurnOn() { b_state TTRUE; Displaystate(); } void TurnOff() { b_state TFALSE; Displaystate(); } void Displaystate() { std::cout The state is b_state std::endl; } private: bool b_state; }; void main() { Switch sw1, sw2, all_on, all_off; Light lp1(TTRUE), lp2(TFALSE); sw1.Clicked.connect(lp1, Light::ToggleState); //绑定 sw2.Clicked.connect(lp2, Light::ToggleState); all_on.Clicked.connect(lp1, Light::TurnOn); all_on.Clicked.connect(lp2, Light::TurnOn); all_off.Clicked.connect(lp1, Light::TurnOff); all_off.Clicked.connect(lp2, Light::TurnOff); sw1.Clicked(); sw2.Clicked(); all_on.Clicked(); all_off.Clicked(); sw1.Clicked.disconnect(lp1); sw2.Clicked.disconnect(lp2); all_on.Clicked.disconnect(lp1); all_on.Clicked.disconnect(lp2); all_off.Clicked.disconnect(lp1); all_off.Clicked.disconnect(lp2); } */ #include sigc/sigc.h class AlienDetector { public: void run() { signal_detected.emit(test); } sigc::signalvoid(std::string) signal_detected; // changed }; void warn_people(std::string where) { std::cout There are aliens in where ! std::endl; } int main_callback() { AlienDetector mydetector; auto target mydetector.signal_detected.connect(sigc::ptr_fun(warn_people)); // return sigc::connection mydetector.run(); target.disconnect(); return 0; }创作不易小小的支持一下吧