2015-07-10 284 views
5

您可以在普通類內轉發聲明模板內部類,並將定義的類型用作任何其他前向聲明類型。模板類嵌套在模板類中的前向聲明

class Outer { 
    template <int N> class Inner; 
    typedef Inner<0> Inner0; 
    Inner0* f(); 
}; 

template<int N> 
class Outer::Inner {}; 

現在,如果Outer本身就是一個模板類,有沒有辦法保持外部聲明的外部聲明?例如:

template<typename T> 
class Outer { 
    template <int N> class Inner; 
    typedef Inner<0> Inner0; 
    Inner0* f(); 
}; 

template<typename T, int N> //This won't work 
class Outer<T>::Inner {}; 

是否有正確的語法來聲明Outer具有正確的模板參數?

回答

7

嘗試使用以下

template<typename T> 
template <int N> 
class Outer<T>::Inner {}; 

根據C++標準(14.5.2會員模板)

1模板可以類或類模板中聲明;這樣一個 模板被稱爲成員模板。可以在其類定義或類模板定義內或外定義成員模板 。 A 在其 類模板定義之外定義的類模板的成員模板應使用成員模板的類模板的 模板參數和 模板參數指定。

+0

哦,上帝,這是如此明顯......感謝您的答覆:) – Louen

+1

@Louen歡迎您:) –