设为首页 加入收藏

TOP

STL扩展技术手册 前言
2013-10-07 00:32:30 来源: 作者: 【 】 浏览:64
Tags:STL 扩展 技术 手册 前言

前言

我的伯父John,是那种我父母一代称为的“男人中的男人”。他强壮、粗犷、有点吓人,很有牛仔气概,他会愿意承认自己害怕,其程度如同我可以描绘自己适度的失败。所以,当他形容,第二次跳伞的挑战是克服已知的恐惧,我记住了。我现在已经写了两本书,我可以毫无疑问地证实这种相同的恐惧。开始第二次时,你知道有多少痛苦即将来临,这不是件能轻易做到的事。那么问题是,为什么我还这样做呢?
其原因在序言中阐述,总的来说是,试图对以下看似简单的两面性做出回应。

C++(www.cppentry.com)太复杂了。

C++(www.cppentry.com)是唯一足够强大,能满足我需要的语言。

这种两面性反响最大的一个领域是,使用尤其是扩展标准模板库(STL, Standard Template Library)。本书(及其姊妹篇,卷2),是我在过去十年左右的时间内,为解决这一挑战性课题,积累的知识和经验的精华。

目标

本书描述了一个使用和扩展STL的好办法。书中定义了以下内容:

集合的概念,以及它和容器概念的区别

元素引用类别的概念,包括它的重要性如何,它如何被定义,它如何被检测,和它施加在STL扩展集合和迭代器设计之上的妥协

外部迭代器失效的现象,及其令人惊讶的行为对STL兼容集合设计的影响

一个能探测任意集合特性的机制,不论该集合是否提供变动性操作

书中说明了几个问题:

为什么变换迭代器适配器必须按值返回元素

为什么过滤迭代器必须总是输入一对迭代器来进行操纵

如果在迭代中,底层集合有改变,该怎么办

为什么你应该禁止输出迭代器类中无意义的语法,以及如何利用解引用代理模式做到这点

书中展示了如何:

将批量返回元素的API适配到STL集合概念

将逐个返回元素的API适配到STL集合概念

共享枚举状态,以正确实现输入迭代器概念的需求

枚举可能是无限的集合

为特定迭代器类型特化标准算法,以优化性能

为系统环境变量定义一个安全,平台独立的STL扩展,通过全局变量实现

适配一个集合,其迭代器实例的可拷贝性要在运行时才能决定

提供对可逆但不可重复集合的访问

使用迭代器写字符缓冲区

《Extended STL》会解决这些问题以及更多问题。它还着眼于如何构建通用的,STL兼容的软件库,同时不牺牲健壮性,灵活性,还有特别是,性能。《Extended STL》教你如何制作你的抽象蛋糕,用效率的奶油裱花,然后吃了它。

你应该阅读这本书,如果你想:

学习STL扩展中特殊的原则和技巧

查看STL扩展的实现,来学习更多关于STL的知识

学习实现封装的通用技术,在操作系统的API和专用技术的软件库之上实现封装

学习如何编写迭代器适配器,并理解其实现和使用上的限制,及其背后的原因

获得通用软件库性能优化的技术

在STL扩展中使用经过考验的软件组件

关于主题

我相信,你必须写你所知道的东西。因为本书的主要目的,是传授对STL扩展的过程和问题的认识,所以大部分讨论的材料来自于我的工作,即我自己的(开源的)STLSoft库。由于我是从零开始,实现了STLSoft的几乎所有功能,因此,它是让我说话有权威的最佳材料。当我们讨论设计上的错误时,这一点尤其重要;公开地详细评述他人的设计错误,不太可能取得许多积极成果。

但是,这并不意味着,阅读《Extended STL》会迫使您使用STLSoft,或者,其他软件库的追随者,不能在此学到任何合乎他们惯例的东西。事实上,它不是劝诱人们使用任何特殊的软件库,它所展现的材料是让你从里到外查看STL扩展,重点是STL的原则和扩展的实践,而不是依赖于STLSoft或任何其他软件库的现有知识。如果,当你读完这本书,你仍然不想使用STLSoft库,没关系,只要你学到了有用的知识,知道如何实现和使用其他STL扩展。

我不自诩,示范STL扩展的方法时,我所使用的方式,是最好的方式。C++(www.cppentry.com)是一种非常强大的语言,支持多种风格和技巧,以至于有时候反而会不利。举例来说,许多集合,但不是全部,最好实现为STL集合,而有些则是用独立的迭代器表示会更好。其中有相当多的重叠,需要忍受许多模棱两可的表达。

对于大多数讨论的STL扩展,我让读者(在某些情况下还有作者!)参加一个旅行,先是原始的API,通过中间实现进行封装,但这往往是有缺陷的,然后达成一个最优的,或者至少是最理想的版本。我不回避实现上和概念上的复杂性。事实上,为了将外部API塑造成STL的形式,某些技术必须包含一定程度的技巧。我不会为了叙述简单,假装这些东西在实现中不存在,或对它们不作任何解释。我将涵盖这些东西,并在这样做时,我希望能够(1)揭穿它们的一些复杂性和(2)解释它们为什么是必要的。

理解STL最好的方式之一,是学习如何实现STL组件,而学习如何实现STL组件,最好的方式是实现它们。如果你没有时间(或爱好)去实现STL组件,我建议你使用第二个最好的方式,就是阅读本书。

结构

本书分为三大部分。

第一部分:基础

这一部分是一些小章节,为第二和第三部分讨论的材料提供基础。它首先简要回顾STL的主要特点,随后讨论了有关STL扩展的概念和原则,包括一个新概念的介绍,即元素引用类别。下面几章考虑基础性的概念、机制、范式,和原则:一致性、约束、契约、DRY SPOT、RAII、垫片。余下几章涉及模板工具和技术,包括特征类,和推断式接口适配,以及在第二和第三部分讨论的实现中用到的几个关键组件。

第二部分:集合

这部分是本书的主体。每一章涉及一个或多个相关的真实世界中的集合,和集合的适配,使之成为一个STL扩展集合组件,同时还有适当的迭代器类型。主题上,适配的对象种类繁多,如:文件系统枚举、COM枚举器、非STL的容器、分散/聚集I/O,甚至还有元素受外部更改的集合。涉及的问题包括:迭代器类别选择和元素引用类别的概念、状态分享、可变性,和外部迭代器失效。

第三部分:迭代器

第二部分中的材料包含的是,与集合关联的迭代器类型的定义,而第三部分是专门针对独立的迭代器类型的。涉及的主题范围从定制输出迭代器类型(包括对std::ostream_iterator的功能简单扩展的讨论),到复杂的迭代器适配器(可以对它们所应用的底层区间,进行类型和值的过滤和转换)。

第2卷

第2卷尚未完成,其结构也尚未最后确定,但将包含如下内容:函数、算法、适配器、分配器,以及STL扩展概念:区间和视图。

补充材料

CD-ROM

所附光盘包含各种免费软件库(包括所有文中涉及的库)、测试程序、工具,和其他有用的软件。还包括三个完整的,但未经编辑的章节(这三章没有印刷出来,是为了减少篇幅,或是为了避免太多的编译器相关性),还有许多来自其他章节的注解和小节。

在线资源

补充材料也可从网上下载:http://extendedstl.com/

【责任编辑:董书 TEL:(010)68476606】

回书目      下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇STL扩展技术手册 目录 下一篇STL扩展技术手册 编排体例

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: