元组如何<Ts...>&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...>&并从元组“抛出”的一个要素。

以上是 元组如何&lt;Ts...&gt;&base = t;在元组实现中工作 的全部内容, 来源链接: utcz.com/qa/257301.html

回到顶部