C++编程利器之信号和槽--回调函数的处理技巧
2010-12-08 05:25:51 来源:WEB开发网核心提示:现在想想,这个工具之所以方便,C++编程利器之信号和槽--回调函数的处理技巧,在于它把一个用户界面的操作事件,对应到了一个响应函数中;更一般的,完全不用程序员自己写任何有关多线程的代码,只要调用该事件的notifyAsync()函数即可将注册的全部回调函数在另一个线程中执行一遍,一个对象把一个事件通知给另一个对象,而设
现在想想,这个工具之所以方便,在于它把一个用户界面的操作事件,对应到了一个响应函数中;更一般的,一个对象把一个事件通知给另一个对象,而设计这两个对象的类时,彼此又不相关,这一功能是非常有用的。MFC中用消息映射,Qt中用信号和槽实现了这样的功能,这两者用起来都比较方便。但是消息映射是MFC独有的;Qt为实现信号和槽专门有一个预处理器,用Qt写出的代码并不是完全标准的C++代码;这都影响了这种功能在更一般的代码中的广泛使用。
感谢开源软件,实际上有多个完全用C++实现的信号和槽,比如libsigc++。该库的设计初衷是实现一个类型安全的回调函数的实现方法。使用该库时要注意,其中的回调函数可以有三种形式,一是无输入参数的函数,二是无输入参数的类成员函数,三是只接收一个输入参数的普通函数,其实,后两种函数几乎可以传入任意数目的参数,因为类有多个成员,普通函数的输入参数也可以是结构体。
另一个比较有特色的实现是模仿C#中的Event设计的,即Poco::Event,它的特点是可以在另外一个线程中执行响应函数,完全不用程序员自己写任何有关多线程的代码,只要调用该事件的notifyAsync()函数即可将注册的全部回调函数在另一个线程中执行一遍,极大的方便了开发。
赞助商链接