一刷 2000 本(2003/02/22)
Modern C++ Design 繁体中文版
侯捷 / 於春景 译

(全图)
侯捷推荐相关书籍:《C++ Templates》,《C++ Template Metaprogramming》
□中译书名(暂名): C++ 设计新思维
□适合对象:高阶 C++ 程式员
□制作特色:与原文本页页对译,含 index,网片输出,平装。
□内容特色:本书开创编程新视野、新领域(Generic Programming + Design
Pattenrs)
以下开放之 PDF file,含全书完整书签(亦即目录连结),但正文只开放1~4章,因此你若按下其他章节之目录连结,将不起效用。
| 档名 | 内容 | 大小 bytes |
| mcd-c-chap1-4.pdf | 译序(两篇) 目录 原序(两篇) 前言 致谢 1~4章 叁考书目 索引 |
1,676,869 |
| Loki 源码 Loki 当然以其创造者 Andrei Alexandrescu 的 |
不需密码即可开启。档案含书签(目录连结)。
如欲下载,请将滑鼠移至上述 hyperlink,按右键,再选【另存目标...】即可。
前卫的意义 侯捷译序
一般人对C++ templates的粗浅印象,大约停留在「容器(containers)」制作上。稍有研究则会发现,templates衍生出来的C++ Generic Programming(泛型编程)技术,在C++ 标准程式库中已经遍地开花结果。以STL为重要骨干的C++标准程式库,将templates广泛运用於容器(containers)、演算法(algorithms)、仿函式(functors)、配接器(adapters)、配置器(allocators)、迭代器(iterators)上头,无处不在,无役不与,乃至於原有的class-based iostream都被改写为 template-based iostream。彻底研究过
STL源码(SGI版本)的我,原以为从此所有C++ templates技法都将不出我的理解与经验之外。但是《Modern C++ Design》在在打破了我的想法与自信。这本书所谈的template技巧,以及据以实作出来的Loki程式库,让我瞠目结舌,陷入沉思┅与┅呃┅恍惚J 。本书分为两大部分。首先(第一篇)是基础技术的讨论,包括
template template parameters(请别怀疑,我并没有多写一个字)、policies-based design、compile-time programming、recursive templates, typelists。每一项技术都让人闻所未闻,见所未见。第二部分(第二篇)是
Loki程式库的产品设计与实作,包括Small-Object Allocation(注1), Generalization Functors, Singleton, Smart Pointers, Object Factories, Abstract Factory, Visitor, Multimethods。对设计范式(design patterns,注2)稍有涉猎的读者马上可以看出,这一部分主题都是知名的范式。换言之,作者Andrei尝试以templates-based, policies-based手法,运用第一篇完成的基础建设,将上述范式具体实现出来,使任何人能够轻松地在Loki程式库的基础上,享受设计范式所带来的优雅架构。 注1:Small-Object Allocation属於底层服务的「无名英雄」,故而在章节组织上仍被划入第一篇。 注2:patterns一词,台湾大陆两地共出现三种译法:(1) 范式 (2) 样式 (3) 模式。我个人最喜欢「范式」,足以说明patterns的「典范」意味。因此本书以「范式」称patterns。顾及大陆术语习惯,简体版以「模式」称patterns。本书所有patterns都保留英文名称并以特殊字型标示,例如Object Factories, Visitors┅。设计范式(
Design Patterns)究竟能不能被做成「易开罐」让人随时随地喝上一口,增强体力?显然范式社群(patterns community)中有些人不这麽认为 ─ 见稍後Scott Meyers序文描述。我以为,论断事物不由本质,尽好口舌之辩的人,不足取也。Andrei所拓展的天地,Loki所达到的高度,不会因为它叫什麽名字而有差异,也不会因为任何人加诸它身上的什麽文字包装或批评或解释或讨好,而有不同。它,已经在那儿了。本书涉足无人履踏之境,不但将 C++ templates和 generics programming技术做了史无前例的推进,又与 design patterns达成巧妙的结合。本书所谈的技术,所完成的实际产品,究竟是狂热激进的象牙塔钻研?抑或高度实用的崭新设计思维?做为一个技术先锋,Loki的现实价值与未来,唯赖你的判断,和时间的筛选。
然而我一定要多说一句,算是对「唯实用论」的朋友们一些忠告。由来技术的推演,并不只是问一句「它有用吗」或「它现在有用吗」可以论断价值的。牛顿发表万有引力公式,并不知道三百年後人们用来计算轨道、登陆月球。即使在讲述「STL运用」的课堂上,都还有人觉得太
前卫,期盼却焦躁不安,遑论「STL设计思维和内部实作」这种课,遑论Loki这般前卫技术。很多人的焦虑是:我这麽学这麽做这麽写这麽用,同侪大概看不懂吧,大概跟不上吧。此固值得关注,但个人的成长千万别被群体的惯性绊住脚步(注3)。我们曾经鄙夷的别人的「无谓」超前,可能只因我们故步自封,陷自己於一成不变的行为模式;或因为我们只看到自家井口的天空。当然,也可能某些前卫思想和技术,确实超越了庞大笨重迟缓的现实世界的接受度。你有选择。做为一位理性思考者,身在单纯可爱的技术圈内,请不要妄评先锋,因为他实在站在远比你(我)高得太多的山巅上。不当的言语和文字并不能为你(我)推砌楼台使与同高。深度
+ 广度,古典 + 前卫,理论 + 应用,实验室 + 工厂,才能构筑一个不断进步的世界。侯捷 2003/01/08 於台湾新竹
jjhou@ccca.nctu.edu.twP.S.
本书初译稿前三章,邱铭彰先生出力甚多,特此致谢。P.S.
STL, Boost, Loki, ACE...等程式库的发展,为C++ 领域挹注了极大活力和竞争力,也使泛型技术在C++ 领域有极耀眼的发展。这是C++ 社群近年来最令人兴奋的事。如果你在C++ 环境下工作,也许这值得你密切关注。 注3:从万有引力观之,微小粒子难逃巨大质量团的吸滞(除非小粒子拥有高能量)。映照人生,这或许是一种悲哀。不过总会有那麽一些高能粒子逸脱出来 ─ 值得我们转悲为喜,怀抱希望 。
不论是《C++设计新思维》(Modern C++ Design)的读者,或单纯只是 Loki library 的潜在用户或技术观察者,都苦於一个事实:这套 library 的技术和想法太先进(前卫)了,以至於很难找到编译器能够全数吃下它们(当然,这不是 Loki 的问题,是编译器厂商的脚步问题)。虽然本书前言之中作者曾经列出两个可用的编译器:Metrowerks CodeWarrior Pro 6.0 和 Comeau C++ 4.2.38,但它们都不是主流编译器,大部份人手上都没有它们。
如果你到 SouceForge http://sourceforge.net/projects/loki-lib/ 下载一份 Loki implementation,你可以看到有许多人在不同的(主流)编译器上对 Loki 做出调整版本。这是一份好资源。
我自己,看到那麽多 CVS 版本,想到得将自己融入不同版本的(不知哪个地方的修改)之中,头都大了。为了做自己更有兴趣做的事,也为了提升自己的技术,我决定亲手调一份「侯捷版本」,同时也为每一章写下一些测试程式。
这里开放我的成果。这些成果一方面坚实我自己对《C++设计新思维》和 Loki library 的掌握,一方面算是给《C++设计新思维》读者的一份 bonus :) 唯请注意,这份版本主要还是基於我个人修练的目的而完成,所以并没有很正式而严谨的风貌,有些焦点以外的 Loki source code 甚至暂时被我 remark 起来。
所谓「侯捷调整版」是以当初(精确日期已忘)从 Andrei 网站下载的版本(Last update: February 19, 2001)为根据,就我自己感兴趣的主题(占 Loki 面积大部份,但非全部)略加修改,使能通过至少一个主流编译器(我的最终选择是 GNU C++)。为方便将来更多可能的调整和测试,我保留了调整过程中的一些测试码(但可能 remark 起来)。我把所有档案名称都後缀以 "-jj",以便与正宗 Loki 有所区别,避免误用。namespace 仍沿用 "Loki"。
开放档案如下:
| 档名 | 内容 | 大小 bytes |
| loki-jj-20030402.zip 这份版本(含各章测试程式)可通过
程式注释使用繁体中文。大陆读者请自行转码。 解压缩後,可得(按书上出场次序排列): |
(1) Loki-jj 侯捷调整版 (2) 《C++设计新思维》各章测试程式
|
55807 bytes
|
如欲下载,请将滑鼠移至上述 hyperlink,按右键,再选【另存目标...】即可。
-- the end