简介:实用工具类开发和维护会耗费程序员的时间。Boost 通过提供几个高质量的库,从而简化了此 过程,您可以将这些库轻松集成到现有的代码库中。本文简单概述一些较流行的 Boost 实用工具类,并 帮助您了解如何将它们投入使用。
实用工具类(utility classes)在几乎任何适当规模的 C++ 项目中都是必需的,但是不存在满足此 需求的标准方法。通常,团队根据他们的需求编写实用工具类代码,但是由于缺少重要的接口信息,使得 相同组织中的其他项目团队无法重用那些类。建议的标准模板库(Standard Template Library,STL)只 具有诸如 hash、stack 和 vector 等少数基本类,因此无法有效地用于取代遗留实用工具库。
本文将介绍几个 Boost 实用工具类,包括 tuple、static_assert、pool、random 和 program_options。您需要对标准 STL 具备一定的了解才能充分理解本文的内容。本文中的所有代码都已 使用 Boostb 1.35 来进行了测试并使用 gcc-3.4.4 来进行了编译。
boost::tuple 类
有时,您希望 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 元组并打印内容
#include <iostream>
#include <tuple.hpp>
#include <tuple_comparison.hpp>
#include <tuple_io.hpp>
using namespace boost;
int main ( )
{
tuple<int, char, float> t(2, 'a', 0.9);
std::cout << t << std::endl;
return 0;
}
此代码的输出为 (2 a 0.9)。请注意,<< 运算符重载 std::ostream,以便通过转储每个单独 的 tuple 元素来输出元组。