2016-07-22 45 views
2
template <typename T> 
struct A 
{ 
    template <typename T1> 
    struct B {}; 
}; 

template <typename T> 
using b = A<T>::B; 

上面的代碼拒絕編譯。是否有可能在C++中使用類別模板?

鐺給出了這樣的錯誤: 使用類模板的 'A < T> ::型' 要求

+3

缺少類型名稱的模板參數,A :: B是一種依賴類型。 – Borgleader

+0

'struct A'可以有一個模板專門化,其中'A :: B'(例如)可以是一個靜態變量而不是一個類型。因此,對於編譯器,您必須指定您希望'A :: B'通過在其之前寫入'typename'而成爲一種類型。 – KABoissonneault

回答

3

因爲B是模板應它提供了一個模板參數

template <typename T> 
struct A 
{ 
    template <typename T1> 
    struct B {}; 
}; 

template <typename T,typename T1> 
using b = typename A<T>::template B<T1>; 
相關問題