一种编写回调函数的简单方法
繁琐的重复性工作
在之前的一篇文章中,我们讨论了这样一个主题:如果回调函数是一个类的成员函数,则这个回调函数必须被声明为静态的。
编写一个静态的回调函数,其实并不复杂,但是还是比较繁琐,下图中展示了一个正儿八经的回调函数定义:

在这个类中,它有一个线程过程函数,这个函数必须具有正确的函数原型,然后为了能够在线程过程函数中访问到类对象,你需要将一个对象指针作为线程的参数传递进去。
的确,我们每次编写这样的线程过程函数时,都可以这样手动的编写重复的代码,但是,如果我们使用一种更加精巧的手法来编写这个回调函数,则我们可以轻松的应对诸如此类的重复应用场景,并能顺利地访问到这个”this”指针,听起来还挺有意思的,对吧?
如何改进我们的代码?
可以使用下面的模板代码来对这个线程过程函数进行抽象化,如下图所示:

这个模板代码声明了一个模板化的线程过程函数。请注意,我们这里使用了正确的调用约定CALLBACK来声明这个模板函数,所以,它可以直接传递给CreateThread函数。
接下来,我们的类代码就可以简化到下面的版本,请看:

通过对代码进行模板化改造,我们将之前版本中的回调函数定义从类中隐藏起来,实际上该回调函数由编译器自动从模板中生成出来。这样,我们就可以将注意力集中在逻辑功能上,而不用花时间在琐碎的重复编码上,是不是感觉轻松了一些呢?
总结
通过合理使用模板这个技术,可以将重复性的代码交给编译器来做,而将宝贵的时间用在系统核心功能的构建上。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Wrapper templates to make writing callback functions slightly easier》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
相关推荐
- 第 709 期:惠普承认其最新的 BIOS 更新导致 Windows 11 出问题
- Posted on 05月27日
- 第 563 期:微软确认 Windows 11 26H1 版本支持生命周期
- Posted on 03月20日
- 第 1000 期:微软工程师解释 Windows 系统中的 “上帝模式” 的工作原理
- Posted on 08月28日
- Visual Studio对CMake工程的ARM64平台的支持
- Posted on 01月24日



评论已关闭。