版权声明:原创文章未经同意,禁止转载 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