1. 程式人生 > >c++超級好用的回撥signal slot

c++超級好用的回撥signal slot

用過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