2014-11-22 55 views
1

我需要索引到可變參數模板來獲得第N類型,但我無法使用std::tuple,因爲我不能保證所有類型不會是抽象的。例如,行:獲取第N類型的可變參數模板**當一個或多個類型是一個接口**

using Type = typename std::tuple_element<N, std::tuple<Types...>>::type; 

給出編譯錯誤當一個或多個的Types是抽象的(例如一個界面)。有沒有使用STL索引可變參數模板的不同方法?這不是一個難以解決的問題:

template <size_t Index, typename... Types> 
struct get_type; 

template <typename Type, typename... Types> 
struct get_type<0, Type, Types...> 
{ 
    using type = Type; 
}; 

template <size_t Index, typename Type, typename... Types> 
struct get_type<Index, Type, Types...> 
{ 
    using type = typename get_type<Index - 1, Types...>::type; 
}; 

但我寧可不重新發明輪子,如果標準提供了一種替代方法。

回答

2

的問題不在於std::tuple(模板別名工作),簡單地說就是,你不能聲明抽象類型的對象,你需要聲明一個指針或引用它。

template<std::size_t N, typename... Types> 
using Type = typename std::tuple_element<N, std::tuple<Types...>>::type; 

struct X 
{ 
    virtual void foo() = 0; 
}; 

int main(){ 
    Type<0, int, double, X> t1; 
    Type<1, int, double, X> t2; 
    Type<2, int, double, X>* t3; // We declare a X* 
}; 

Live demo

+1

暫時無法在一個新的項目,瑞普在此之後,我調試多一點,並發現了其他項目使用的是舊版本的STL。時間去洞裏哭... :( – Duncan 2014-11-22 09:13:55

相關問題