c++超級好用的回撥signal slot
阿新 • • 發佈:2018-12-09
用過Qt的應該都知道,signal slot,用來做解耦及回撥超級好用,如果沒有Qt怎麼辦,可以用c++11的功能實現,
當然網路上已經有許多實現,可以直接用的。
比如:
示例程式碼:
// Using Delegate.h void MyFunc( int x ) { printf( "MyFunc( %d )", x ); } // Using Signal.h class Button { public: Signal2< int, float > updateLabel; void Click( void ) { updateLabel( 2, 34.5 ); } }; class Label { public: virtual void Update( int i, float f ) { printf( "Update( %d, %.1f )", i, f ); } }; int main() { Delegate1< int > delegate; delegate.Bind( & MyFunc ); delegate( 5 ); Button myButton; Label myLabel1; Label myLabel2; myButton.updateLabel.Connect( & myLabel1, & Label::Update ); myButton.updateLabel.Connect( & myLabel2, & Label::Update ); myButton.Click(); return 0; }
是不是很方便,其他的專案:
這裡其實還有一個需求,像qt一樣,回撥可以指定繫結到sender還是reciver的執行緒中去執行,這種需要呼叫回撥的程式碼那裡修改實現,簡單看了下描述,好像上面幾個實現沒有這個功能. 還有一種是自建執行緒執行,最後這種方式實現比較簡單。
作者:帥得不敢出門 c++哈哈堂:31843264