2015-04-01 76 views
1

有沒有辦法在編譯時檢測某個類是模板類還是簡單類?檢查一個類是否是模板類

如:

class A 
{ 
    public: 
    void GetValue() 
    { 
     return 10 (compile time check? "": "+ 10"); // just an example 
    } 
}; 

class B : public A 
{ 
}; 

template <class T> 
class C : public A 
{ 
}; 
+0

如果使用'typeid(x).name()',如果它有<<'的東西,那麼它是模板。 – 2015-04-01 06:31:31

+0

我希望它能夠在編譯時工作。 – 2015-04-01 06:38:48

回答

3

您可以爲創建一個特質:

template <typename T> 
struct is_type_templated : std::false_type {}; 

template <template <typename...> class C, typename ... Ts> 
struct is_type_templated<C<Ts...>> : std::true_type {}; 

Live example

注意,它不處理模板值(std::array<T, N>)。