C++模板元编程(C++ 领域扛鼎之作,荣耀先生倾情翻译,名著名译)
基本信息
- 原书名: C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond
- 原出版社: Addison-Wesley Professional
- 作者: (美)David Abrahams Aleksey Gurtovoy [作译者介绍]
- 译者: 荣耀
- 丛书名: C++设计新思维
- 出版社:机械工业出版社
- ISBN:9787111267423
- 上架时间:2009-11-11
- 出版日期:2010 年1月
- 开本:16开
- 页码:277
- 版次:1-1
- 所属分类:
计算机 > 软件与程序设计 > C++ > C++
内容简介回到顶部↑
本书是关于c++模板元编程的著作。本书主要介绍traits和类型操纵、深入探索元函数、整型外覆器和操作、序列与迭代器、算法、视图与迭代器适配器、诊断、跨越编译期和运行期边界、领域特定的嵌入式语言、dsel设计演练,另外附录部分还介绍了预处理元编程概述、typename和template关键字。本书通过理论联系实践,深入讲解了c++高级编程技术。.
本书适合中、高阶c++程序员等参考。..
本书清晰地揭示了现代c++最具威力的使用手法,将实际的工具和技术交付普通程序员的手中。
元编程是产生或操纵程序码的程序。自从泛型编程被引入c++中以来,程序员们已经发现用于当程序被编译时对其进行操纵的无数“tricks template”,这些tricks有效地消除了横亘在程序和元编程之间的藩篱。尽管c++专家们对这种能力的兴奋已经波及整个c++社区,然而它们的实际应用对于大多数程序员来说仍然是遥不可及。本书解释了何谓元编程以及如何最佳化地使用它,为你在自己的工作中有效地使用模板元编程提供了必备的基础。
本书瞄准于任何熟悉标准模板库(standard template library,stl)惯用法的程序员。c++高级用户会获得对既有工作新的洞察以及对元编程领域新的认知。那些已经学习了一些高级模板技术的中级程序员将会明白这些tricks是从哪儿适合大画面的,并将获得有秩序地使用它们所需的概念基础。对于那些已经嗅到元编程味道但对其仍然感到神秘的程序员而言,最终将获得对元编程如何工作、何时工作以及为何工作的清晰的理解。无论如何,所有读者都将获得一个可以自由支配的、威力空前的新工具:boost metaprogramming library。
附赠光盘内容包含所有boost c++ 程序库:boost metaprogramming library及其参考文件,还包含所有随书代码示例以及大量的补充材料。...
本书适合中、高阶c++程序员等参考。..
本书清晰地揭示了现代c++最具威力的使用手法,将实际的工具和技术交付普通程序员的手中。
元编程是产生或操纵程序码的程序。自从泛型编程被引入c++中以来,程序员们已经发现用于当程序被编译时对其进行操纵的无数“tricks template”,这些tricks有效地消除了横亘在程序和元编程之间的藩篱。尽管c++专家们对这种能力的兴奋已经波及整个c++社区,然而它们的实际应用对于大多数程序员来说仍然是遥不可及。本书解释了何谓元编程以及如何最佳化地使用它,为你在自己的工作中有效地使用模板元编程提供了必备的基础。
本书瞄准于任何熟悉标准模板库(standard template library,stl)惯用法的程序员。c++高级用户会获得对既有工作新的洞察以及对元编程领域新的认知。那些已经学习了一些高级模板技术的中级程序员将会明白这些tricks是从哪儿适合大画面的,并将获得有秩序地使用它们所需的概念基础。对于那些已经嗅到元编程味道但对其仍然感到神秘的程序员而言,最终将获得对元编程如何工作、何时工作以及为何工作的清晰的理解。无论如何,所有读者都将获得一个可以自由支配的、威力空前的新工具:boost metaprogramming library。
附赠光盘内容包含所有boost c++ 程序库:boost metaprogramming library及其参考文件,还包含所有随书代码示例以及大量的补充材料。...
作译者回到顶部↑
本书提供作译者介绍
David Abrahams,Boost C++程序库开发组的一名发起成员和主持人。自从1996年起,Dave就是一名ANSI/ISO C++委员会成员,他因对C++标准程序库异常处理的理论、规格和实现的贡献而名声鹊起。他的公司Boost Consulting提供了与Boost有关的支持和开发服务,以及软件构建艺术的职业培训。.
Aleksey Gurtovoy,MetaCommunications的一名技术领导,并且是Boost C++社区的功勋成员。他是Boost Metaprogramming Library最初的作者。自1993年起他就开始研究C++并使用它工作。Aleksey拥有俄罗斯克拉斯诺雅.. << 查看详细
Aleksey Gurtovoy,MetaCommunications的一名技术领导,并且是Boost C++社区的功勋成员。他是Boost Metaprogramming Library最初的作者。自1993年起他就开始研究C++并使用它工作。Aleksey拥有俄罗斯克拉斯诺雅.. << 查看详细
目录回到顶部↑
译者序.
序言
前言
致谢
第1章 概述 1
1.1 起步走 1
1.2 元程序的概念 1
1.3 在宿主语言中进行元编程 3
1.4 在c++中进行元编程 3
1.4.1 数值计算 3
1.4.2 类型计算 5
1.5 为何进行元编程 6
1.5.1 替代方案1:运行期计算 6
1.5.2 替代方案2:用户分析 6
1.5.3 为何进行c++元编程 7
1.6 何时进行元编程 7
1.7 为何需要元编程程序库 7
第2章 traits和类型操纵 9
2.1 类型关联 9
2.1.1 采用一种直接的方式 9
序言
前言
致谢
第1章 概述 1
1.1 起步走 1
1.2 元程序的概念 1
1.3 在宿主语言中进行元编程 3
1.4 在c++中进行元编程 3
1.4.1 数值计算 3
1.4.2 类型计算 5
1.5 为何进行元编程 6
1.5.1 替代方案1:运行期计算 6
1.5.2 替代方案2:用户分析 6
1.5.3 为何进行c++元编程 7
1.6 何时进行元编程 7
1.7 为何需要元编程程序库 7
第2章 traits和类型操纵 9
2.1 类型关联 9
2.1.1 采用一种直接的方式 9
译者序回到顶部↑
作为一种高阶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 Abrahams与Boost MPL的作者Aleksey Gurtovoy的这部著作第一次系统地阐述了模板元编程。
本书从内容上分为理论和实践两部分。前八章和部分附录内容以Boost元编程库为主线介绍模板元编程的概念、技术、工具及陷阱。其余篇幅则主要讨论模板元编程的一个重要的应用:DSEL(Domain-Specific Embedded Languages,领域特定的嵌入式语言)的设计与实现。虽然只有少数C++程序员需要创建DSEL,但了解其原理和实现大有裨益,有利于用好他人创建的DSEL,更重要的是,还可从中领会模板元编程的运用手法以及分析、解决实际问题的方法。..
本书阅读门槛较高,适合希望了解模板元编程的中、高阶C++程序员尤其是程序库设计者阅读。如果你缺乏模板元编程必备的基础知识,例如类模板的特化和实例化、双重模板参数、typedef以及模板的继承等,建议参阅侯捷、荣耀和姜宏合译的《C++模板全览》(繁体版)一书,打好基础。
与常规C++编程技术相比,模板元编程技术较为复杂。因此不少C++程序员以为它高不可攀,或以为它只是库设计者的工具。虽然这项技术一直都没有疏远我们,然而我们自己的不作为却使它显得遥不可及。实际上,面向对象编程与泛型编程、运行期与编译期以及动态与静态之间并不互相排斥,而是对立统一的。从更高处审视C++程序设计,将多种编程范型优势互补,无疑可以开发出对程序员和最终用户而言更强大、更美妙的应用。
下一代C++标准C++0x将从语言和程序库两方面进一步增强对模板编程的支持,作为模板编程的一个高阶子集,模板元编程也将从中受益。实际上,C++0x还将对模板元编程提供更友好的支持,(部分)Boost元编程程序库将会成为C++0x标准库的一个组成部分。模板元编程与普通C++程序员渐行渐近。现在,就让这本书引领你开始奇妙之旅!
感谢刘未鹏先生为第3章和附录A做出的高品质初译协助,感谢机械华章陈冀康先生、周茂辉编辑以及其他所有为本书面世付出贡献的人士,感谢朱艳和荣坤,生活因你们而更加精彩。
祝各位阅读快乐!
荣耀
2006年6月
南京师范大学中北学院...
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 Abrahams与Boost MPL的作者Aleksey Gurtovoy的这部著作第一次系统地阐述了模板元编程。
本书从内容上分为理论和实践两部分。前八章和部分附录内容以Boost元编程库为主线介绍模板元编程的概念、技术、工具及陷阱。其余篇幅则主要讨论模板元编程的一个重要的应用:DSEL(Domain-Specific Embedded Languages,领域特定的嵌入式语言)的设计与实现。虽然只有少数C++程序员需要创建DSEL,但了解其原理和实现大有裨益,有利于用好他人创建的DSEL,更重要的是,还可从中领会模板元编程的运用手法以及分析、解决实际问题的方法。..
本书阅读门槛较高,适合希望了解模板元编程的中、高阶C++程序员尤其是程序库设计者阅读。如果你缺乏模板元编程必备的基础知识,例如类模板的特化和实例化、双重模板参数、typedef以及模板的继承等,建议参阅侯捷、荣耀和姜宏合译的《C++模板全览》(繁体版)一书,打好基础。
与常规C++编程技术相比,模板元编程技术较为复杂。因此不少C++程序员以为它高不可攀,或以为它只是库设计者的工具。虽然这项技术一直都没有疏远我们,然而我们自己的不作为却使它显得遥不可及。实际上,面向对象编程与泛型编程、运行期与编译期以及动态与静态之间并不互相排斥,而是对立统一的。从更高处审视C++程序设计,将多种编程范型优势互补,无疑可以开发出对程序员和最终用户而言更强大、更美妙的应用。
下一代C++标准C++0x将从语言和程序库两方面进一步增强对模板编程的支持,作为模板编程的一个高阶子集,模板元编程也将从中受益。实际上,C++0x还将对模板元编程提供更友好的支持,(部分)Boost元编程程序库将会成为C++0x标准库的一个组成部分。模板元编程与普通C++程序员渐行渐近。现在,就让这本书引领你开始奇妙之旅!
感谢刘未鹏先生为第3章和附录A做出的高品质初译协助,感谢机械华章陈冀康先生、周茂辉编辑以及其他所有为本书面世付出贡献的人士,感谢朱艳和荣坤,生活因你们而更加精彩。
祝各位阅读快乐!
荣耀
2006年6月
南京师范大学中北学院...
前言回到顶部↑
本书一开始的几章为你了解书中其他大多数内容铺设了必需的概念基础,后续各章通常建立于先前各章讲述的内容之上。也就是说,你可以自由地往前跳读,我们已经尽力使你能够这么做,因为当我们在使用早先介绍过的术语时提供了交叉引用。.
第10章是“后续各章依赖于先前各章”这一规则的例外。它主要集中于概念之上,放在本书靠后的位置,因为到那时你将已经学到了将领域特定的嵌入式语言应用于现实代码中的工具和技术。如果读完本书你只记得一章的内容,希望就是这一章。
在很多章临近结尾的部分,你都会发现一个名为“细节”的小节,它们总结了关键的思想,而且往往还会添加新材料以深化先前的讨论,因此,即使你在第一遍阅读时倾向于忽略它们,我们还是建议你在以后回头查阅它们。
大多数章以“练习”结束,它们设计用于帮助你发展编程和概念的能力。那些标以星号(*)的练习被认为比其他练习题困难一些。并非所有练习都要求你写程序,其中一些可以看做是问答题,并且也不是非得完成它们才能接着往下阅读。不过,我们建议你最好浏览它们一下,稍加思考如何回答每一个问题,并且动手做练习,这对于你巩固已经阅读过的内容是一个非常好的办法。如果你需要提示,可以考虑到boost用户邮件列表讨论问题(参见http://www.boost.org/ more/mailing_lists.htm)。本书的Web站点(http://www.boost-consulting.com/mplbook)提供了一组wiki网页链接,其中包含挑选出的练习的答案。
补充材料
本书附带一张CD,以电子形式提供了以下材料:
·书中的示例代码。
·Boost C++程序库的一个发行版。Boost因高质量、同级复审、可移植、泛型(通用)、可自由(免费)复用而知名。本书中我们广泛地使用了Boost程序库之一:Boost 元编程库(MPL,元编程库),当然我们也讨论了其他一些程序库。
·一个完整的MPL参考手册,包括HTML和PDF两种格式。..
·本书中讨论到的、尚未成为正式发行版一部分的Boost程序库。
CD中顶层index.html文件为你提供了到其包含的所有内容的方便的引导。附加的和更新的材料,以及必不可少的勘误,将出现于本书的Web站点(http://www.boost-consulting.com/mplbook)上。你在那儿还会发现一个用于报告你可能会发现的任何错误的地方。
试验
为了编译任何例子,只需将CD中的boost_1_32_0/目录设置到你使用的编译器的#include路径中即可。
我们展示于本书中的程序库已经竭尽全力隐藏不那么完美的编译器的问题,因此,在编译我们展示在这儿的例子过程中不大可能遇到困难。我们将C++编译器大致分为三类:
A. 大体上符合模板标准实现的编译器。在这些编译器上,示例和程序库完全可以工作。2001年后发布的几乎任何编译器,以及一些早于那个时间发布的编译器,都可归入这个范畴。
B. 需在客户代码中做一些迂回处理才可以工作的编译器。
C. 那些太拙劣以致于无法有效地用于模板元编程的编译器。
附录D列出了已知的符合每一个范畴的编译器。对于类型B中的编译器而言,附录D提及了一个移植手法列表。为了避免使大多数读者为之分心,这些迂回处理方式没有出现在正文中。你可以到本书的Web站点(http://www.boost-consulting.com/mplbook)下载补丁代码。
CD中还包含了一个有关移植性的表格,它详尽描述了各种编译器是如何处理示例的。对于许多平台而言,GCC都有可以免费获得的版本,且其最新版在处理列在这儿的代码时不会有任何问题。
即便你手头已经拥有一个处于类型A的相对现代的编译器,获取一份GCC拷贝并使用它来核查代码仍然是个好主意。通常破译难以理解的错误信息的最容易的方式,就是看看其他编译器对你的程序说了些什么。如果你发现当尝试做练习时要与错误信息搏斗,你也许可以往前跳一跳,阅读第8章的头两节,它们讨论了如何阅读和管理诊断信息。
第10章是“后续各章依赖于先前各章”这一规则的例外。它主要集中于概念之上,放在本书靠后的位置,因为到那时你将已经学到了将领域特定的嵌入式语言应用于现实代码中的工具和技术。如果读完本书你只记得一章的内容,希望就是这一章。
在很多章临近结尾的部分,你都会发现一个名为“细节”的小节,它们总结了关键的思想,而且往往还会添加新材料以深化先前的讨论,因此,即使你在第一遍阅读时倾向于忽略它们,我们还是建议你在以后回头查阅它们。
大多数章以“练习”结束,它们设计用于帮助你发展编程和概念的能力。那些标以星号(*)的练习被认为比其他练习题困难一些。并非所有练习都要求你写程序,其中一些可以看做是问答题,并且也不是非得完成它们才能接着往下阅读。不过,我们建议你最好浏览它们一下,稍加思考如何回答每一个问题,并且动手做练习,这对于你巩固已经阅读过的内容是一个非常好的办法。如果你需要提示,可以考虑到boost用户邮件列表讨论问题(参见http://www.boost.org/ more/mailing_lists.htm)。本书的Web站点(http://www.boost-consulting.com/mplbook)提供了一组wiki网页链接,其中包含挑选出的练习的答案。
补充材料
本书附带一张CD,以电子形式提供了以下材料:
·书中的示例代码。
·Boost C++程序库的一个发行版。Boost因高质量、同级复审、可移植、泛型(通用)、可自由(免费)复用而知名。本书中我们广泛地使用了Boost程序库之一:Boost 元编程库(MPL,元编程库),当然我们也讨论了其他一些程序库。
·一个完整的MPL参考手册,包括HTML和PDF两种格式。..
·本书中讨论到的、尚未成为正式发行版一部分的Boost程序库。
CD中顶层index.html文件为你提供了到其包含的所有内容的方便的引导。附加的和更新的材料,以及必不可少的勘误,将出现于本书的Web站点(http://www.boost-consulting.com/mplbook)上。你在那儿还会发现一个用于报告你可能会发现的任何错误的地方。
试验
为了编译任何例子,只需将CD中的boost_1_32_0/目录设置到你使用的编译器的#include路径中即可。
我们展示于本书中的程序库已经竭尽全力隐藏不那么完美的编译器的问题,因此,在编译我们展示在这儿的例子过程中不大可能遇到困难。我们将C++编译器大致分为三类:
A. 大体上符合模板标准实现的编译器。在这些编译器上,示例和程序库完全可以工作。2001年后发布的几乎任何编译器,以及一些早于那个时间发布的编译器,都可归入这个范畴。
B. 需在客户代码中做一些迂回处理才可以工作的编译器。
C. 那些太拙劣以致于无法有效地用于模板元编程的编译器。
附录D列出了已知的符合每一个范畴的编译器。对于类型B中的编译器而言,附录D提及了一个移植手法列表。为了避免使大多数读者为之分心,这些迂回处理方式没有出现在正文中。你可以到本书的Web站点(http://www.boost-consulting.com/mplbook)下载补丁代码。
CD中还包含了一个有关移植性的表格,它详尽描述了各种编译器是如何处理示例的。对于许多平台而言,GCC都有可以免费获得的版本,且其最新版在处理列在这儿的代码时不会有任何问题。
即便你手头已经拥有一个处于类型A的相对现代的编译器,获取一份GCC拷贝并使用它来核查代码仍然是个好主意。通常破译难以理解的错误信息的最容易的方式,就是看看其他编译器对你的程序说了些什么。如果你发现当尝试做练习时要与错误信息搏斗,你也许可以往前跳一跳,阅读第8章的头两节,它们讨论了如何阅读和管理诊断信息。
序言回到顶部↑
1998年,Dave获权参加在德国Dagstuhl Castle举行的泛型编程研讨会。在研讨会临近尾声时,热情的Kristof Czarnecki和Ullrich Eisenecker(在产生式编程领域颇有声望)散发了一些C++源代码,那是采用C++模板编写的完整的Lisp实现清单。那时候,对于Dave而言那不过是个新奇的玩具而已,是对模板系统迷人但不切实际的“劫持”,以证实我们可以编写执行于编译期的程序。他从未想象有朝一日会在自己的大多数日常编程工作中发挥元编程(metaprogramming)的作用。在许多方面,那个模板代码集合是Boost元编程库(Metaprogramming Library, MPL)的先驱:它可能是第一个设计用于将编译期C++从一个特别的“模板技巧”集合转变为正规的、易理解的软件工程的范例的程序库。随着用于编写和理解元程序(metaprogram)的高阶工具的出现,我们发现使用这些技术不但切实可行,而且简单、有趣,并常常带来令人惊讶的威力。.
撇开存在许多采用模板元编程和MPL的真实系统不谈,很多人仍然将元编程视作神秘的魔法,并且在日常产品代码中避免使用它。如果你从未进行过任何元编程,你甚至都看不出它和你所做的工作有什么明显的关系。在这本书中,我们希望能够揭开它的神秘面纱,使你不但对如何进行元编程有所理解,对为何(以及何时)进行元编程也会有很好的认知。最好的事情莫过于,尽管有许多神秘将会云开雾散,但你会发现这个主题中仍然蕴藏足够的神奇,让你流连忘返,受到启迪,获得灵感,如同我们一样。..
—Dave和Aleksey ...
撇开存在许多采用模板元编程和MPL的真实系统不谈,很多人仍然将元编程视作神秘的魔法,并且在日常产品代码中避免使用它。如果你从未进行过任何元编程,你甚至都看不出它和你所做的工作有什么明显的关系。在这本书中,我们希望能够揭开它的神秘面纱,使你不但对如何进行元编程有所理解,对为何(以及何时)进行元编程也会有很好的认知。最好的事情莫过于,尽管有许多神秘将会云开雾散,但你会发现这个主题中仍然蕴藏足够的神奇,让你流连忘返,受到启迪,获得灵感,如同我们一样。..
—Dave和Aleksey ...
媒体评论回到顶部↑
“如果你像我一样,对人们在模板元编程(Template Metaprogramming,TMP)方面所做的工作感到兴奋,但对缺乏这方面的清晰指导和强有力的工具感到沮丧,那好,这本书正是我们期待已久的。借助于优秀的Boost Metaprogramming Library,David和Aleksey将TMP从实验室带到了生产一线,以易读的文字和实际的例子向我们展示了‘编译期STL’与其运行期对应物具有同样的能耐。本书既可以作教程,也可以用作专家手册。这是一本关于C++ 的扛鼎之作。”.
—— Chuck Allison,The C++ Source编辑...
—— Chuck Allison,The C++ Source编辑...
相关资源回到顶部↑
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· C/C++ 经典著作(《C专家编程》《C++ Templates中文版》《C和指针 》《C陷阱与缺陷》《C++沉思录》)








点击看大图





加载中...

