导言
tuple库如何改进我们的程序?
- 从函数返回多个返回值
- 相关类型的组合
- 将数值组合起来
tuple比pair好在哪里?
标准库提供了一个 tuple 的特例,一个2-tuple, 名为 std::pair. 这个结构被用于标准库的容器,你可能在操作 std::map 的元素时已经留意到了。你也可以在容器类中存储 pair。当然,std::pair 不仅是为了给容器类使用的,它还有它自己的用途,它附带有一个方便的函数 std::make_pair, 可以自动地进行类型推断,还有一组操作符用于 pair 的比较。一个 tuple 的通常解决方案,而不仅仅是 2-tuples,会更加有用。Tuple 库所提供的还不是完全通用的,它最多可以允许10个元素的 tuple
(如果需要更多的,看起来不常见但也不是没有可能的,这个限制可以放松)。还有,这些 tuples 的效率与使用 struct 的手工解决方案同样高!
使用
以下是 Boost.Tuple 的部分接口,列出了最主要的一些函数。
namespace boost {
template <class T1, class T2, ..., class TM>
class tuple {
public:
tuple();
template <class P1, class P2..., class PM>
tuple(class P1, class P2, ..., PN);
template <class U1, class U2, ..., class UN>
tuple(const tuple<U1, U2, ..., UN>&);
tuple& operator=(const tuple&);
};
template<class T1, class T2, ..., class TN>
tuple<V1, V2, ..., VN>
make_tuple(const T1& t1, const T2& t2, ..., const TN& tn);
template<class T1, class T2, ..., class TN>
tuple<T1&, T2&, ..., TN>
tie(T1& t1, T2& t2, ..., TN& tn);
template <int I, class T1, class T2, ..., class TN>
RI get(tuple<T1, T2, ..., TN>& t);
template <int I, class T1, class T2, ..., class TN>
PI get(const tuple<T1, T2, ..., TN>& t);
template <class T1, class T2, ..., class TM, class U1, class U2, ..., class UM>
bool operator==(const tuple<T1, T2, <