说道C++中的delegate机制,在网上已经有很多人给出了自己的实现,我觉得最值得借鉴的有两篇,第一个是Yingle Jiang(蒋迎乐)在CodeProject上面发表的Yet Another C#-style Delegate Class in Standard C++(http://www.codeproject.com/cpp/acfdelegate.asp),另一个是Don Clugston在CodeProject上写的Member Function Pointers and the Fastest Possible C++ Delegates – The Code Project – C++ / MFC(http://www.codeproject.com/cpp/FastDelegate.asp)。
对于第一篇,Yingle Jiang所实现的delegate和我所想的方案非常类似,当然,他实现了更多更强大的功能,做的比我完善的多。因此,今天仔细看了他的解决方案之后就觉得没有必要再做下去了,在这种思路之下我暂时没有想到有什么值得改进的地方。值得一提的是,他自己在SourceForge上面做了一个名为Another C++ Framework的开源项目,目的是将.Net Framework中的一些基础设施引入到C++开发中去,这就包括delegate和EventHandler,我觉得今后如果要用到类似的基础设施完全可以从他那里获得经验并且移植。
对于第二篇,Don Clugston则用一种依赖于编译器的方式实现了高效的成员函数指针调用和C++的delegate机制。简单的说,他利用各种编译器在各种平台上生成的汇编代码的特点,将C++中神秘的成员函数调用还原普通的函数调用,其调用的汇编代码用他的框架在运行时“生成”,使任何函数都可以无差别的挂接在他的 delegate之上。可以看出,他为了实现这个机制对很多种编译器在很多平台上的表现都做过研究,其艰辛可想而知。
总而言之,我已经没必要花时间实现更完善的delegate和EventHandler机制,我将更多的关注插件机制,自己做一个简单可用的东西再说。