AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析。他们研究出了一种新的编程思想,借助这一思想或许可以通过减少代码重复模块从而帮助开发人员提高工作效率。随着研究的逐渐深入,AOP也逐渐发展成一套完整的程序设计思想,各种应用AOP的技术也应运而生。
AOP技术在Java平台下是最先得到应用的。就在PARC对于面向方面编程进行研究的同时,美国Northeastern University的博士生Cristina Lopes和其同事也开始了类似的思考。最终,美国国防先进技术研究计划署(Defense Advanced Research Projects Agency即DARPA)注意到了这项工作,并提供了科研经费,鼓励将二者的工作成果结合起来。他们通过定义一套Java语言的扩展系统,使开发者可以方便的进行面向方面的开发,这套扩展系统被称为AspectJ。之后,AspectJ在2002年被转让给Eclipse Foundation,从而成为在开源社区中AOP技术的先锋,也是目前最为流行的AOP工具。
那么对于C++技术来说,怎样来开展AOP呢,幸好有Olaf Spinczyk 这样的人存在,我们也有了aspect c++。它使用了插入代码的方法。一个典型的Aspect C++示例需要一个C++源文件(.cpp)、一个aspect C++源文件(.ah),通过ac++编译器把C++源文件和aspect C++源文件转换成混合的C++源文件(如果有头文件也会转换),最后通过普通的C++编译器编译出可执行文件。
那么我现在如果不想用第三方编译器,自己去实现AOP,不知道CPPBLOG里的大虾有什么想法?