Class c++;使用类型内部类指针定义模板类的静态成员
我有一个像这里这样的模板类(在标题中),它有一个内部类和一个指向内部类的指针类型的静态成员Class c++;使用类型内部类指针定义模板类的静态成员,class,static,templates,pointers,member,Class,Static,Templates,Pointers,Member,我有一个像这里这样的模板类(在标题中),它有一个内部类和一个指向内部类的指针类型的静态成员 template <class t> class outer { class inner { int a; }; static inner *m; }; template <class t> outer <t>::inner *outer <t>::m; 模板类外部{ 班级内部{ INTA; }; 静态内部*m;
template <class t> class outer {
class inner {
int a;
};
static inner *m;
};
template <class t> outer <t>::inner *outer <t>::m;
模板类外部{
班级内部{
INTA;
};
静态内部*m;
};
模板外部::内部*外部::m;
当我想定义静态成员时,我在最后一行(mingw32-g++3.4.5)上说“错误:在“*”标记之前需要构造函数、析构函数或类型转换”您需要限定
内部
类是一个类型名,因为它依赖于模板参数,C++编译器假设在这个上下文中,名称<代码>内部< /代码>不是一个类型:
现在,outer::inner
不再命名类型;它命名一个成员变量
<> P>因此,在一般情况下,<>代码>外::内部< /代码>将是模糊的,C++解决了这种模糊性,假设
typename
:typename-outer::inner
。(在此上下文中,internal
被称为从属名称,因为它取决于t
的确切类型)您对空格的使用使得最后一行难以正确阅读。为了理解它的意思,我不得不认真地想了一会儿。基本上,您将属于一起的内容(类型名、模板参数、指针限定符)拆开,将不属于一起的内容(指针限定符、变量名)粘在一起。
template <class t> typename outer<t>::inner* outer<t>::m;
template <>
class outer<int> {
int inner;
};