c++超级好用的回调signal slot

版权声明:原创文章未经同意,禁止转载 https://blog.csdn.net/zmlovelx/article/details/82686123

用过Qt的应该都知道,signal  slot,用来做解耦及回调超级好用,如果没有Qt怎么办,可以用c++11的功能实现,

当然网络上已经有许多实现,可以直接用的。

比如:

https://github.com/pbhogan/Signals

示例代码:

// 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;
}

是不是很方便,其他的项目:

https://github.com/NoAvailableAlias/nano-signal-slot

http://libsigc.sourceforge.net/

http://sigslot.sourceforge.net/

这里其实还有一个需求,像qt一样,回调可以指定绑定到sender还是reciver的线程中去执行,这种需要调用回调的代码那里修改实现,简单看了下描述,好像上面几个实现没有这个功能. 还有一种是自建线程执行,最后这种方式实现比较简单。

作者:帅得不敢出门    c++哈哈堂:31843264

猜你喜欢

转载自blog.csdn.net/zmlovelx/article/details/82686123