在这里,我测试检查一个由“typename D”定义的var,是一个不合格的依赖名称。答案是肯定的。因为如果我把它的定义写两次:
template<typename D>
class A {
D d_field;
D d_field;
void func() { d_field = 1000; }
}
int main()
{
return 0;
}
g++ 会报重定义错误。以便它演示在模板定义中检查了“d_field”。
如果我给出一个类型“double*”来使用这个模板。模板实例化发生,func2 报错,“int can't be convert to double*”。
template<typename D>
class A {
D d_field;
void func() { d_field = 1000; }
}
int main()
{
A<double*> a;
a.func();
return 0;
}
它证明“d_field”将在模板实例化中被检查。
另外,我改成下面这样,g++就可以编译好了。证明gcc是基于c++标准的两阶段查找工作... .
template<typename D>
class A {
D:: d_field;
D:: d_field;
void func() { d_field = 1000; }
}
int main()
{
return 0;
}
总之,使用模板参数在模板中定义一个变量,该变量的名称是一个不合格的从属名称。
这样对吗?