2015-07-10 145 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欢迎您:) –