http://zh.highscore.de/cpp/boost/frontpage.html
Boost C++ 库
目录
- 第 1 章 简介
- 第 2 章 智能指针
- 第 3 章 函数对象
- 第 4 章 事件处理
- 第 5 章 字符串处理
- 第 6 章 多线程
- 第 7 章 异步输入输出
- 第 8 章 进程间通讯
- 第 9 章 文件系统
- 第 10 章 日期与时间
- 第 11 章 序列化
- 第 12 章 词法分析器
- 第 13 章 容器
- 第 14 章 数据结构
- 第 15 章 错误处理
- 第 16 章 类型转换操作符
内容
你将学到些什么
本书是对 Boost C++ 库的介绍,Boost 库通过加入一些在实践中非常有用的函数对 C++ 标准进行了补充。 由于 Boost C++ 库是基于 C++ 标准的,所以它们是使用最先进的 C++ 来实现的。 它们是平台独立的,并由于有一个大型的开发人员社区,它可以被包括 Windows 和 Linux 在内的许多操作系统所支持。
Boost C++ 库可以提升你作为一个 C++ 开发人员的生产力。 例如,你可以从智能指针中受益,帮助你写出更可靠的代码,或者使用某个库来开发平台独立的网络应用。 因为多数 Boost C++ 库正被收录进下一个版本的 C++ 标准,所以你可以从今天就开始作好准备。
要求
你应该懂得些什么
因为 Boost C++ 库是基于且扩展了 C++ 标准,所以你应该懂得 C++ 标准。 你应该了解且能够使用容器、迭代器及算法,最好有听说过以下概念:RAII,函数对象,或是谓词。 你越是了解 C++ 标准,就越能从 Boost C++ 库中受益。
1.1. C++ 与 Boost
Boost C++ 库 是一组基于C++标准的现代库。 其源码按 Boost Software License 来发布,允许任何人自由地使用、修改和分发。 这些库是平台独立的,且支持大多数知名和不那么知名的编译器。
Boost 社区负责开发和发布 Boost C++ 库。 社区由一个很大的C++开发人员群组组成,这些开发人员来自于全球,他们通过网站 www.boost.org 以及几个邮件列表相互协调。 社区的使命是开发和收集高质量的库,作为C++标准的补充。 那些被证实有价值且对于C++应用开发非常重要的库,将会有很大机会在某天被纳入C++标准中。
Boost 社区在1998年左右出现,当时刚刚发布了C++标准的第一个版本。 从那时起,社区就不断地扩大,现在已成为C++标准化工作中的一个重要角色。 虽然 Boost 社区与标准化委员会之间没有直接的关系,但有部分开发者同时活跃于两方。 下一个版本的C++标准很大可能在2011年通过,其中将扩展一批库,这些库均起源于 Boost 社区。
要增强C++项目的生产力,除了C++标准以外,Boost C++ 库是一个不错的选择。 由于当前版本的C++标准在2003年修订之后,C++又有了新的发展,所以 Boost C++ 库提供了许多新的特性。 由于有了 Boost C++ 库,我们无需等待下一个版本的C++标准,就可以立即享用C++演化中取得的最新进展。
Boost C++ 库具有良好的声誉,这基于它们的使用已被证实是非常有价值的。 在面试中询问关于 Boost C++ 库的知识是不常见的,因为知道这些库的开发人员通常也清楚C++的最新创新,并且能够编写和理解现代的C++代码。
1.2. 开发过程
正是因为大量的独立开发者和组织的支持和参与,才使用 Boost C++ 库的开发成为可能。 由于 Boost 只接受满足以下条件的库:解决了真实存在的问题、表现出令人信服的设计、使用现代C++来开发且以可理解的方式提供文档,所以每一个 Boost C++ 库的背后都有大量的工作。
C++ 开发者都可以加入到 Boost 社区中,并提出自己的新库。 但是,要将一个想法变成一个 Boost C++ 库,需要投入大量的时间和努力。 其中最重要的是在 Boost 邮件列表中与其他开发者及潜在用户讨论需求和可能的解决方案。
除了这些好象不知从何处冒出来的新库以外,也可以提名一些已有的 C++ 库进入 Boost。 不过,由于对这些库的要求是与专门为 Boost 开发的库一样的,所以可能需要对它们进行大量的修改。
一个库是否被接纳入 Boost,取决于评审过程的结果。 库的开发者可以申请评审,这通常需要10天的时间。 在这段时间内,其他开发者被邀请对这个库进行评分。 基于正面和负面评价的数量,评审经理将决定该库是否被接纳进入 Boost。 由于有些开发者是在评审阶段才首次公开库的代码,所以在评审期间被要求对库进行修改并不罕见。
如果一个库是因为技术原因被拒绝,那么它还有可能在修改之后对更新后的版本申请新的评审。 但是,如果一个库是因为不能解决实际问题或未能提供令人信服的解决方案而被拒绝,那么再一次评审也很可能会被拒绝。
因为可能随时接纳新的库,所以 Boost C++ 库会每三个月发布一次新版本。本书所涉及的库均基于2010年2月发布的 1.42.0 版本。
请注意,另外还有一些库已被接纳,但尚未成为 Boost C++ 库发布版的一部分。在被包含进发布版之前,它们必须手工安装。
1.3. 安装
Boost C++ 库均带有源代码。其中大多数库只包含头文件,可以直接使用,但也有一些库需要编译。 为了尽可能容易安装,可以使用 Boost Jam 进行自动安装。 无需逐个库进行检查和编译,Boost Jam 自动安装整个库集。 它支持许多操作系统和编译器,并且知道如何基于适当的配置文件来编译单个库。
为了在 Boost Jam 的帮助下自动安装,要使用一个名为 bjam 的应用程序,它也带有源代码。 对于某些操作系统,包括 Windows 和 Linux,也有预编译好的 bjam 二进制文件。
为了编译 bjam 本身,要执行一个名为 build 的简单脚本,它也为不同的操作系统提供了源代码。
对于 Windows,它是批处理文件 build.bat
。 对于 Linux,文件名为 build.sh
。
如果执行 build 时不带任何命令行选项,则该脚本尝试找到一个合适的编译器来生成 bjam。 通过使用命令行开关,称为 toolset,可以选择特定的编译器。 对于 Windows,build 支持 toolsets vc7
, vc8
和 vc9
,可以选择不同版本的 Microsoft C++ 编译器。 要从 Visual Studio 2008 的C++编译器编译 bjam,需要指定命令 build vc9。对于 Linux,支持 toolsets gcc
和 intel-linux
,分别选定 GCC 和 Intel 的C++编译器。
应用程序 bjam 必须复制到本地的 Boost 目录 - 不论它是编译出来的还是下载的预编译二进制文件。 然后就可以不带任何命令行选项地执行 bjam,编译并安装 Boost C++ 库。 由于缺省选项 - 在这种情况下所使用的 - 并不一定是最好的选择,所以以下列出最重要的几个选项供参考:
-
声明
stage
或install
可以指定 Boost C++ 库是安装在一个名为stage
的子目录下,还是在系统范围内安装。 "系统范围"的意义取决于操作系统。 在 Windows 中,目标目录是C:\Boost
;而在 Linux 中则是/usr/local
。 目标目录也可以用--prefix
选项明确指出。 -
如果不带任何命令行选项执行 bjam,则它会自己搜索一个合适的C++编译器。 可以通过
--toolset
选项来指定一个特定的编译器。 要在 Windows 中指定 Visual Studio 2008 的 Microsoft C++ 编译器,bjam 执行时要带上--toolset=msvc-9.0
选项。 要在 Linux 中指定 GCC 编译器,则要给出--toolset=gcc
选项。 -
命令行选项
--build-type
决定了创建何种方式的库。 缺省情况下,该选项设为minimal
,即只创建发布版。 对于那些想用 Visual Studio 或 GCC 构建他们项目的调试版的开发者来说,可能是一个问题。 因为这些编译器会自动尝试链接调试版的 Boost C++ 库,这样就会给出一个错误信息。 在这种情况下,应将--build-type
选项设为complete
,以同时生成 Boost C++ 库的调试版和发布版,当然,所需时间也会更长一些。
要用 Visual Studio 2008 的C++编译器同时生成 Boost C++ 库的调试版和发布版,并将它们安装在目录 D:\Boost
中,应执行的命令是 bjam --toolset=msvc-9.0 --build-type=complete --prefix=D:\Boost install. 要在 Linux 中使用缺省目录创建它们,则要执行的命令是 bjam --toolset=gcc --build-type=complete install.
其它多个命令行选项可用于指定如何编译 Boost C++ 库的一些细节设定。 我通常在 Windows 下使用以下命令:bjam --toolset=msvc-9.0 debug release link=static runtime-link=shared install. debug
和 release
使得调试版和发布版均被生成。 link=static
则只创建静态库。 runtime-link=shared
则是指定 C++ 运行时库是动态链接的,这是在 Visual Studio 2008 中对C++项目的缺省设置。