实现std :: tuple的细节

时间:2018-01-06 14:40:32

标签: c++ c++11

This website教我们如何实现一个简单的std :: tuple,但是有一段我不理解的代码

template <size_t k, class... Ts>
typename std::enable_if<
    k == 0, typename elem_type_holder<0, tuple<Ts...>>::type&>::type
get(tuple<Ts...>& t) {
  return t.tail;
}

template <size_t k, class T, class... Ts>
typename std::enable_if<
    k != 0, typename elem_type_holder<k, tuple<T, Ts...>>::type&>::type
get(tuple<T, Ts...>& t) {      
  //Why t could assign to different type?
  tuple<Ts...>& base = t;
  return get<k - 1>(base);
}

我的问题是

tuple<T, Ts...>

tuple<Ts...>

是不同的类型,它怎么能起作用?

编辑:我想我找到了答案,因为

tuple<Ts...> 

的基类
tuple<T,Ts...>

1 个答案:

答案 0 :(得分:1)

可能tuple<T, Ts...>继承自tuple<Ts...>