2017-12-02 93 views
3

當我讀取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...>&

+3

從變量的名稱來看,它是從派生到基礎的轉換。 – chris

+2

看起來像這個實現有元組工作的東西像'元組:元組 {尾巴; };' –

回答

2

它是一個從派生類引用到基類引用的轉換,它是一個完全有效的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...>&並從元組「拋出」的一個要素。

相關問題