C++完美演绎 

有时我想,如果现在有人来写一本C++新书,还有什么可说的呢?毕竟关于C++已经有那么多的好书了。在浏览了Matthew Wilson的这本《Imperfect C++ : Practical Solutions for Real-Life Programming》之后,我发现关于C++的话题其实还有很多很多…… 

是的,尽管C++是一门非凡的语言,但它并不完美。在这本书中,Matthew不但为我们一一指出C++的不尽如人意之处,还提供了经过实践检验的技术、工具以及经验,便于我们编写出更为强建、高效和灵活的代码。其中有许多技术可能是你以前从未尝试过或仅仅浅尝辄止的,例如:处理C++标准所忽略而现实编程中不得不对付的问题(包括应用程序二进制接口、动态链接库以及线程等);如何提高不同的编译器、库以及操作系统之间的兼容性;利用模板技术来提高灵活性和强健性(包括CastShimVeneerBolt-in以及Template Constructor等);以及C++高级扩展技术(包括仿函数与区间、属性等),等等。 

有别于那些躲在C++象牙塔里说梦话的作者,作为STLSoft(包括ATLSTLCOMSTLMFCSTLUNIXSTL以及WinSTL)等实用库的主创者,Matthew的实践领域更接近于现实世界的C++程序员。他在举例时,Windows APIMFCATLCOMLinux以及UNIX等都是信手拈来。他为我们提供的工业强度的技术和极具威力的设计策略在其他地方也是很难看到的。除了丰富的编程实践、扎实的理论基础以及缜密的逻辑思维之外,Matthew的文笔活泼流畅,用语色彩斑斓,字里行间流露出超强的自信,使得本书实用价值极高且极富阅读趣味 — 对,阅读趣味,这是许多C++书籍非常欠缺的! 

我曾就本书请教过Bjarne Stoustrup先生。Bjarne说他阅读过这本书的大部分草稿,倘若该书的页数可以缩减至原来的一半的话,他非常乐意将其加入“深入C++系列”中,因为“精简”是该丛书的基本要求 — 那套丛书都很薄。Bjarne评价Matthew是一位热情的C++实践者,说他向开发者展示了如何对付C++中诸多不完美之处,以便写出高品质的代码,而这些代码在声称为“理想”的语言中更难实现。 

请允许我抒发一下感慨。和许多C++程序员一样,Bjarne也是我的进取榜样。Bjarne技术修养如海,深不见底。我发现非常有趣的一点是,许多C++好书中的精华在Bjarne的作品中大都能找到影子,换句话说,世界上其他C++专家大多是在重复和发扬Bjarne几年前甚至十几年前的真知灼见。虽然并非他说的每一句话我都赞成 — 没错,关于C++,我个人亦有不同于Bjarne的看法。然而我心里很清楚,我辈能耐有限,无论如何也达不到大师的境界。

但是,作为一名C++研究者和实践者,我期望自己能够达到Matthew这样的专家水平。虽然和那些所谓的“学院派”和“大话派”的“专家”相比,凭着在C++领域持续不断的努力,我自负还有一些能量,然而,和世界上真正的C++专家相比,尤其在阅读本书之后,我感到无地自容。如果你和我一样,打算在C++世界继续战斗下去,我希望通过阅读本书并动手实践,从而在理论、实践乃至创新上,我们能够像Matthew那样将C++演绎得淋漓尽致,近乎完美。

很遗憾,我了解到的事实是,为数众多的C++程序员从未在程序中写过“template”这个关键字,更不要说在产品代码中发挥模板编程的威力了。一些C++编程“老手”习惯于年复一年、日复一日地拷贝和粘贴既有代码 — 包括那些积累下来的C风格的代码,以及一些简单的“基于对象”的类,并以“它们久经验证”为借口,甚至美其名曰“此乃代码复用”。尽管造成这种状况的原因并非仅在于个人,但从技术的角度来说,除了自我批评不思进取外,还有什么好辩解的呢? 

我怀疑这种低水平的重复具有普遍性,反映了国内C++应用的真实状况:有数量,没质量。这种落后状况很严重,Bjarne知道了应该很生气。本书中的代码大量采用了现代C++编程风格,在很大程度上展示了如何将模板等高级特性应用于编程实践。因此,作为领衔译者,实事求是地说,我希望我们的努力除了可以自我满足外,也能为改善目前不理想的C++应用现状发挥一些积极的作用。

荣耀
2005
1
南京师范大学

www.royaloo.com