元组如何&base = t;在元组实现中工作
问题描述:
当我读取Variadic templates in C++后,我无法在元组实现中获得一行。元组如何<Ts...>&base = t;在元组实现中工作
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) {
tuple<Ts...>& base = t;
return get<k - 1>(base);
}
tuple<Ts...>& base = t;
是什么意思?我认为t的类型是tuple<T, Ts...>&
,它不能转换为tuple<Ts...>&
。
答
它是一个从派生类引用到基类引用的转换,它是一个完全有效的C++代码。
正如你可能在执行看到,tuple<T, Ts...>
从tuple<Ts...>
得出:
template <class... Ts> struct tuple {};
template <class T, class... Ts>
struct tuple<T, Ts...> : tuple<Ts...> {
tuple(T t, Ts... ts) : tuple<Ts...>(ts...), tail(t) {}
T tail;
};
作为t
的类型为tuple<T, Ts...>&
,你可能将它转换为tuple<Ts...>&
并从元组“抛出”的一个要素。
从变量的名称来看,它是从派生到基础的转换。 – chris
看起来像这个实现有元组工作的东西像'元组:元组 {尾巴; };' –