本版版主招募中

 
标题: 书评:《C++模板完全参考手册》
瓜小南
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 128
精华 32
积分 1808
帖子 3485
活跃指数 10
LU金币 188 个
LU金条 0 个
阅读权限 200
注册 2003-9-26
 
发表于 2003-10-4 16:07  资料  个人空间  短消息  加为好友 
书评:《C++模板完全参考手册》

由于类属编程获得了越来越广泛的使用,现在关于模板的问题也越提越多。模板很难领会和掌握。David Vandevoorde和Nicolai M. Josuttis所编著《C++模板:完全参考手册》(C++ Templates: The Complete Guide)一书把C++类属编程从噩梦变成了乐趣。

如果你像我那样,那么你至少会偶尔使用C++模板。例如,你每日用到的标准模板库(Standard Template Library ,STL)就是全部由模板化的代码(templated code)组成。但是你可能仍会觉得建立自己的模板类或者模板函数依然不那么容易。这有许多复杂的问题需要解决,如成员模板、模板化构造函数以及函数模板参数推导(function template argument deduction)。至少可以说模板的语法很奇怪。而这只是开始。

尽管很复杂,C++模板证明了模板的有效性,正确使用它们时会带来许多乐趣。


一本适合中级和高级C++程序员的书


如果你想利用C++模板所带来的好处,那么你至少应该对C++的知识有中等程度的了解。由于模板有时会以奇怪的方式与过程交互,你还应该很好的理解函数重载。(本书包括了一个附录来专门讨论这个问题。)如果你在C++编程方面没有坚实的基础,那么本书所介绍的技术可能就在你有效使用它们的能力之外了。

如果你是一名中级或者高级C++开发者,本书就是为你而写的。它是一本完全的参考资料,后面的章节提供了真实的例子,简单而又明了。此外,某些章节还提供了“后记”来给出某些模板话题的历史概述。(成员类模板是由于一个疏忽才成为标准的一部分这一有趣故事就是在后记中所讲述的)。



书的布局

本书在第一章(《关于本书》)进行了概述之后,分为了五个部分:

“基本部分”——从第二章到第七章:介绍模板
“模板深入”——从第八掌到第十三章:深入介绍模板已经模板未来发展趋势
“模板与设计”——从第十四章到第十八章:例子、模式、元程序(metaprogram)、表达式模板(expression templates)。
“高级应用”——第十九章到第二十二章:类型分类、聪明指针、数组、函数对象和回调(callback)
两个附录——“The One-Definition Rule”和“Overload Resolution”

许多编程指导书中的介绍性质的章节,熟练的程序员可以将之忽略掉,但是我建议你通读本书的所有内容。即使你认为自己懂得某个方面的内容,还是假设它可能导致日后的模板代码错误。例如,你知道即使在intmax(int, int)类已经存在的情况下,max<>(2, 5)仍会调用max<>(2, 5)吗?本书的2.4节就会指出这个潜在的问题。

第一部分:基本
本书的每一章都给出了某些很有价值的内容。例如,第四章说明了模板参数不必都是有类型的;它们可以是无类型的常量。第五章介绍了几个不易掌握的模板基本概念,如使用成员模板。(如果你有一个模板化的构造函数可能匹配上拷贝构造,但是当你拷贝构造一个对象时它可能不会被调用,你知道这一点吗?)第六章处理了几个实际问题,如模板常常存在于头文件这一事实。

第二部分:模板深入
搜索模板名字有时候是个问题。解决方法就是Koenig搜索,本书第九章对此进行了介绍。类属编程的一个核心组成部分就是特殊化模板。第十二章解释了为什么有时候需要进行特殊化并向你演示了何时以及如何使用这个技巧。第十三章是我的最爱,它描述了今后可能会添加到C++标准中的内容,如函数模板的部分特殊化,typeof运算符和typedef模板。

第三部分:模板与设计
第三部分是本书最出色的地方。第十四章论证了多态也可能是静态的,以允许新的设计模式。第十五章讨论了特性(traits)和策略(policies),它们提供了更高层次上的可重用性。在编译时计算数值是很有价值的,这可以显著提高性能,十七章说明了这一点。想象一下:你可以在编译时计算出主要的数值来!表达式模板,十八章的核心内容,会让你感到震撼。含有很多数学运算的应用程序可以从这个代码元素中获益,有了表达式模板复数数组运算就可以高效计算的同时还保持代码的易读性。

第四部分:高级应用
第四部分在第二和第三部分的基础上的提高部分。第十九章演示了如何在编译时获知某个对象的类型如类、函数或者枚举。聪明指针(smart pointer),在第二十章介绍,如同手套那样适应模板。不要认为这部分的内容和普通的聪明指针文章的内容大同小异,作者介绍了trule的概念,你可以用它来返回一个新分配的指针,这就免去了你处理例外和释放存储单元时的苦恼。算符(functor,带有重载运算符的对象)在二十二章中得到彻底的论述,包括它们有哪些用途。算符也可以组合而成,如f1(f2(x)),你也可以绑定某些参数,如在std::bind1st、std::bind2nd中所做的那样。


缺点
本书的唯一缺点可能就是某些章节(如第十章)的内容有时难以掌握。由于高级类属编程确实比较难学,这一点也容易理解。作者希望你对本书内容的复杂性有个心理准备。


必备之书

本书并不仅仅是模板的完全参考手册。第三和第四部分包含了模板在你日常编程中的应用。现如今,没有用到模板的代码已经很难再看到了。《C++模板:完全参考手册》将会帮助你成为模板化代码的开发者而不仅仅是一名应用者。





我们匆匆相识 匆匆言爱 匆匆相许一生,
爱情也许并没有那么真的让我们那么失望,
失望只是由于我们自己的放弃。

午夜梦回。
略为清醒的时刻,
总是会想起她。
相信, 她也会想起我。
顶部
 



当前时区 GMT+8, 现在时间是 2008-10-14 05:10
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.050557 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver