用过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
阅读(2116) | 评论(0) | 转发(0) |