2017-07-20 31 views
1

我想使用enable_if來爲某些類型定義一個類。在這些類型中,我需要使用一些模板類型,並且我無法使其工作。這裏是一個MWE:使用具有兩級模板的enable_if

模板類A

template<typename T, typename Enable = void> class A; 

其專門爲一些簡單的類型,如整型這裏,可以定義如下:

template<typename T> 
class A<T, std::enable_if<std::is_integral<T>::value>::type> 
{ ... }; 

現在我定義一堆模板類型:

template<typename U> class X {...}; 
template<typename U> class Y {...}; 

我應該如何繼續專門爲我的課AXY類型?

兩次嘗試不工作:

  1. 具有以下,宣告例如A<X<int> >類型的對象產生錯誤incomplete type

    template<typename U> 
    template<typename T> 
    class A<T, std::enable<std::is_same<T, X<U> >::value 
            || std::is_same<T, Y<U> >::value>::type> 
    { ... }; 
    
  2. 具有以下,誤差是'T' is not a template

    template<typename U> 
    template<typename T> 
    class A<T<U>, std::enable<std::is_same<T, X>::value 
             || std::is_same<T, Y>::value>::type> 
    { ... }; 
    

回答

5

XY類模板,而不是類型。你的編譯器正在抱怨在第二個例子中使用類型作爲類模板。

如果你想爲他們

template<typename> 
class A; 

template<typename T> 
class A<X<T>> : A_for_XY<X<T>> {}; 

template<typename T> 
class A<Y<T>> : A_for_XY<Y<T>> {}; 
專業化
相關問題