《C++模板超编程》译序 作为一种高阶C++编程技术,模板超编程突出编译期决策在整个程序构建和运行过程中的地位,努力将计算从运行期提前至编译期,不但有效地防止程序错误被传播到运行期,而且能够实现以静态代码控制动态代码的目标。计算尽可能完成于编译期也提高了最终程序的运行性能。 C++模板超编程诞生于十多年前,最初的研究方向是编译期数值计算,后来的实践发展证明,在型别计算领域此项技术可释放出更大的能量。近几年来,由于Andrei Alexandrescu的Loki程式库对超编程的前卫应用,Boost超编程程式库日益展示出重要的实用价值,C++模板超编程从最初被认为是对模板“过于聪明”的使用,到逐步被学界重视并研究,时至今日,这一高阶编程技术已然为业界所接受。 C++编程书籍不计其数,但涉及模板超编程的书籍屈指可数。作为Loki的传播者,《Modern C++ Design》对超编程的概念和原理的解释不够细致——这不奇怪,那本书的兴趣更在于超编程在静态设计范式上的应用。David Vandevoorde和Nicolai M. Josuttis所著的《C++ Templates》,以及Krzysztof Czarnecki和Ulrich W.Eisenecker的著作《Generative Programming 》,对模板超编程分别做了引介和总结,它们同样不是专注于超编程自身。Boost的创始人之一David Abraham与Boost MPL的作者Aleksey Gurtovoy的这部著作第一次系统地阐述了模板超编程。 本书从内容上大致分为理论和实践两部分。前八章和部分附录内容以Boost超编程程式库为主线介绍模板超编程的概念、技术、工具及陷阱。其余篇幅则主要讨论模板超编程的一个重要的应用:DSEL(Domain-Specific Embedded Languages,领域特定的嵌入式语言)的设计与实现。虽然只有少数C++程式员需要创建DSEL,但了解其原理和实作大有裨益,有利于用好他人创建的DSEL自不必说,更重要的是,还可从中领会模板超编程的运用手法以及分析、解决实际问题的方法。 本书阅读门槛较高,适合希望了解模板超编程的中、高阶C++程式员尤其是程式库作者阅读。如果你缺乏模板超编程必备的基础知识,例如类别模板的特化和具现化、模板的模板参数、typedef以及模板的继承等,建议参阅侯捷、荣耀和姜宏合译的《C++ Templates全览》一书,打好基础。 与常规C++编程技术相比,模板超编程技术较为复杂。不少C++程式员因此以为它高不可攀,或以为它只是库设计者的工具,结果造成,虽然这项技术一直都没有疏远我们,然而我们自己的不作为却使它显得遥不可及。实际上,面向对象编程与泛型编程、运行期与编译期以及动态与静态之间并不互相排斥,而是对立统一。站在更高处审视C++程式设计,将多种编程范型优势互补,无疑可以开发出对程式员和最终用户而言更强大、更美妙的应用。 下一代C++标准C++0x将从语言和程式库两方面进一步增强对模板编程的支持,作为模板编程的一个高阶子集,模板超编程亦将从中受益。实际上,C++0x还将对模板超编程提供更友好的支持,(部分)Boost超编程程式库将会成为C++0x标准库的一个组成部分。模板超编程向普通C++程式员渐行渐近。现在,就让这本书引领你开始奇妙之旅! 感谢良师益友侯捷先生,您的合译邀请使我得以顺理成章地深入模板超编程的世界。感谢刘未鹏先生为第三章和附录A付出的高品质初译协助。感谢朱艳和荣珅,生活因你们而更加精彩。 祝各位阅读快乐! 荣耀 |