template<typename... Values> class tup;
template<> class tup<> {};
template<typename Head, typename... Tail>
class tup<Head, Tail...>
typedef tup<Tail...> composited;
public:
tup() {}
tup(Head v, Tail... vtail) : m_head(v), m_tail(vtail...) {}
Head& head() {return m_head;}
composited& tail() {return m_tail;}
protected:
Head m_head;
composited m_tail;
两种方式在使用的过程中没有什么区别,但C++11中采用的是第一种方式(递归继承)。
在上面的例子中,取出tuple中的元素是一个比较复杂的操作,需要不断地取tail,最终取head才能获得。标准库的std::tuple,对此进行简化,还提供了一些其他的函数来进行对tuple的访问。例如: