在这种情况下,为什么我无法访问B1
案例中不合格的基类成员x
?不loook暧昧我...从模板继承时需要合格的访问权限
template<class T>
struct A { T x; };
template<class T>
struct B1 : A<T> { T f() { return A<T>::x; } };
struct B2 : A<int> { int f() { return x; } };
在这种情况下,为什么我无法访问B1
案例中不合格的基类成员x
?不loook暧昧我...从模板继承时需要合格的访问权限
template<class T>
struct A { T x; };
template<class T>
struct B1 : A<T> { T f() { return A<T>::x; } };
struct B2 : A<int> { int f() { return x; } };
因为x
不依赖,它会在模板中定义的 上下文中抬起头来。在这种情况下, 编译器不知道T
,并且无法查看依赖的基类 类。例如,它如何知道A<T>
的任何内容,而不知道T
是什么。 (可能有A
的专门化,例如完全不同的成员。)
之前使用A
实际上,我认为这里的问题更多的是为什么它不能看到'x',因为我们知道*基类型是'A
基类依赖于'T'。编译器在知道“T”是什么之前不能看到它。 (如果'A
不知道在使用 – pascal 2013-04-05 11:57:12