实用工具类开发和维护会耗费程序员的时间。Boost 通过提供几个高质量的库,从而简化了此过程,您可以将这些库轻松集成到现有的代码库中。本文简单概述一些较流行的 Boost 实用工具类,并帮助您了解如何将它们投入使用。
实用工具类(utility classes)在几乎任何适当规模的 C++ 项目中都是必需的,但是不存在满足此需求的标准方法。通常,团队根据他们的需求编写实用工具类代码,但是由于缺少重要的接口信息,使得相同组织中的其他项目团队无法重用那些类。建议的标准模板库(Standard Template Library,STL)只具有诸如 hash
、stack
和 vector
等少数基本类,因此无法有效地用于取代遗留实用工具库。
本文将介绍几个 Boost 实用工具类,包括 tuple
、static_assert
、pool
、random
和 program_options
。您需要对标准 STL 具备一定的了解才能充分理解本文的内容。本文中的所有代码都已使用 Boost 1.35 来进行了测试并使用 gcc-3.4.4 来进行了编译。
有时,您希望 C++ 函数返回多个不相关的值。在推出 STL 之前,实现此目的的方法是创建所有不相关变量的结构,并以指针或引用的形式返回它们或作为参数传递给函数——但是任一种方法都不是表达程序员意图的方法。STL 引入了 pair
,可将其用于聚合不相关的数据部分,但它一次只能处理两个数据对象。为了使用 int
、char
和 float
的元组(tuple ),您可以按如下方式返回 pair
:
make_pair<int, pair<char, float> > (3, make_pair<char, float> ('a', 0.9)); |
随着您添加更多的元素,创建元组结构将变得越来越困难。Boost tuple
类型派上了用场。要使用 boost::tuple
,您必须包括头文件 tuple.hpp。要执行元组比较和元组 I/O,您需要分别包括 tuple_comparison.hpp 和 tuple_io.hpp。
清单 1 使用 int
、char
和 float
的元组并打印内容。
清单 1. 创建 Boost 元组并打印内容
|
此代码的输出为 (2 a 0.9)
。请注意,<<
运算符重载 std::ostream
,以便通过转储每个单独的 tuple
元素来输出元组。
在使用元组时,务必牢记以下事实:
- 能够形成元组的元素数量目前仅限于 10 个。
- 元组可以包含用户定义的类类型,但是您必须负责确保那些类已经定义了正确的构造函数和拷贝构造函数 (copy constructor)。清单 2 显示了产生编译时错误的代码部分,因为该拷贝构造函数是私有的。
清单 2. 用于元组的类必须具有正确的拷贝构造函数
本文转自IBM Developerworks中国