Boost::tuple就为我们提供了一种类似于匿名struct的方法为我们解决函数的多个返回值的问题。既增强了代码的可读性有不增加代码量。其实在STL中已经有这样的特例,std::pair其实就是boost::tuple的2个参数的特例
一 Boost::tuple
很多的时候我们经常需要为我们的函数返回多个值,一般的做法是通过传入非常量的指针或引用,但是这样的话可能可读性就要差一些,使用者可能需要确切的文档才能确定到底哪个是返回值,为了更好的可读性,我们可以使用class或struct来封装我们要返回的多个值,然后返回封装struct或class,但是使用这种方法的弊端就是增加的程序的代码量,最好的解决办法其实我们可以通过一种匿名的struct或class来解决这个问题。
Boost::tuple就为我们提供了一种类似于匿名struct的方法为我们解决函数的多个返回值的问题。既增强了代码的可读性有不增加代码量。其实在STL中已经有这样的特例,std::pair其实就是boost::tuple的2个参数的特例,对boost::tuple你可以绑定更多的参数,或者你可以迭代实现无限多参数的情况。
二 源码剖析
头文件: "boost/tuple/tuple.hpp",它包含了 tuple 类模板及库的核心部分。
头文件: "boost/tuple/tuple_io.hpp",包含了对 tuple 的输入输出操作符。
头文件: "boost/tuple/tuple_comparison.hpp",包含了 tuple 的关系操作符。
为了方便使用,Tuple 库中有些名字位于名字空间 boost:如 tuple, make_tuple, tie, 和 get.
函数说明:
1)构造函数
2)拷贝构造函数
3)t.get<N>()或get<N>(t) ,取得第N个值
4)make_tuple ,生成tuple
5)tie , 生成都是ref的tuple
6) 重载比较运算符 ,可以直接用来比较
7)重载输入输出运算符 ,可以直接使用IO
8)get_head()和get_tail()函数,用来取得值
9)length<>和element<>用来得到tuple的size和第N个的值类型
10)如果使用boost::TR1,则还可以使用std::tr1::tuple_size(),std::tr1::tuple_element(),分别用来得到tuple的size和第N个值的类型。
三 实例
1)tuple的构造,拷贝构造函数,get成员函数,get全局函数,make_tuple全局函数。
2)使用tie函数模版来生成对ref的绑定的tuple,tuple的比较使用,tuple的输入输出:
四 注意
1)函数 make_tuple 类似于 std::make_pair. 缺省情况下,make_tuple 设置元素类型为非const, 非引用的,即是最简单的、根本的参数类
型。
2)为了使一个 tuple 的元素设为引用类型,你要使用函数 boost::ref, 它来自另一个名为 Boost.Ref 的 Boost 库。
3)如果元素需要是 const 引用的,就使用来自 Boost.Ref 的 boost::cref。
4)如果你要使绑定的每个元素变量都为ref,则可以使用tie函数。
五 参考
1)Beyond the C++ Standard Library: An Introduction to Boost
2)boost在线document
原文链接:http://www.cppblog.com/mzty/archive/2007/08/21/30509.html