2 k, U5 U! {6 V/ n' }9 e) v+ ]( h这就是了——一本即将出版的经典之作,由boost的发起者之一,C++标准委员会的成员David Abraham以及另一位boost成员Aleksey Gurtovoy合著的——《C++ Template Metaprogramming:Concepts,Tools,and Techniques from Boost and Beyond》。 . j; R. O5 N' O4 H) s5 S5 M* ^! I- ?- [- |: `
对于这么一本势必成为经典的书,我实在惶于评价,还是引用其主页上面的一段话吧: ) x( N" C# {6 G1 R3 j . h. n5 s) b4 @* b. h' V) h, I5 }# b& \$ v
8 D& K9 E" V T1 V/ O- x. V5 s
这本讲述C++模板元编程的书将赋予C++用户空前的强大能力,并使这门技术成为程序员手中真正实用的一门技术。 & F% I% g8 h/ r+ U; W r a! ~" |- _4 p% Z/ l
This book covers C++ Template Metaprogramming in a way that provides unprecedented capability to the C++ power-user, and delivers practical metaprogramming into the hands of the everyday programmer. % E2 ~) h. t3 s
7 G; s" @4 D+ r" K- `$ [0 A 4 d& V* e# `4 ^3 e/ z1 X$ l$ o) H3 y; w0 T
一直以来,C++泛型似乎总处于一种奇怪的位置,有人说它太学院派,有人认为那太遥远,现在还用不到它,有人认为那是库的设计者的事情,与程序员关系不大。更有人持“不敢高攀”的态度。其实这些都是错误的态度,泛型是一门由来已久的思想,其核心理念是抽象,并没有什么神秘之处。与面向对象提供的二进制复用相比,泛型的代码提供了源码级的复用,一个具有更强的动态特性,一个具有更强的类型安全性和效率,两者互补才能发挥最大的力量。已经出版的很多关于C++泛型的经典书籍其实已经很好的介绍了这一点。只不过,关于C++泛型,还有一门可以独立出来的技术——模板元编程。而这恰恰是令泛型构件更具表达力和自由度的技术。甚至也可以说是boost库的基石之一(除了部分对泛型依赖不强的组件如Regex等例外)。所以,显而易见这是一门非常重要的技术,这一点从《Generative Programming》一书中也可看出。 ' A3 c6 y( ^6 ]+ d# b6 b. I, a0 E0 k
然而,对于这门可以独立出来的技术,目前我们所看到的只是一些零星的描述,《C++ Templates》里面虽有一整章描述metaprogram,但对于渴求知识者仍如隔靴搔痒,不能尽兴。不过,这种情况就快过去了,《C++ Template Metaprogramming》将会系统的讲述C++模板元编程技术,将这门原先只是大师们手中的利器的神秘技术带到普通程序员的手中,赋予普通程序员惊人的力量。 7 ?9 ?- a" z" R; C5 o& u
* k( L6 C* }6 D6 [如果说《Modern C++ Design》是C++泛型书籍上的经典之作(它的确是),那么这本即将道来的《C++ Template Metaprogramming》将是经典之后的又一次经典! 3 J0 e. l9 b1 _2 H3 {, R5 `, x
0 `% X5 a5 @% p3 H
4 z" Y9 v7 Q) F2 {7 c
作者开放了该书的第三章和附录A。虽然只有两章,但是精彩纷呈,绝对值得一读。下面是我的翻译,一是出于自己的兴趣,二是方便读者。 & L' [( T$ T- |: Q W2 v0 k7 m: f. `3 m) F4 X2 A: A