当尝试从派生类访问基类中的类型别名时,我面临以下问题:
template <typename T>
class A {
public:
using T2 = T;
};
template <typename T>
class B: public A<T> {
public:
typename A<T>::T2 obj1; // OK
T2 obj2; // Error
};
template <typename T>
class C: public A<int> {
public:
typename A<int>::T2 obj1; // OK
T2 obj2; // OK
};
我无法理解为什么使用显式类型初始化基类可以让我们访问基类中的类型别名,但在第一种情况下,它会导致错误。
提前致谢。
T2
是一个非依赖名称。非依赖名称不会在依赖基类中查找,例如A<T>
,这取决于模板参数T
.
A<T>::T2
有效,它是从属名称。依赖名称只能在实例化时查找,那时才能知道必须探索的确切基础专业化。
另一方面,当基类是A<int>
该代码有效是因为A<int>
是一个非依赖基类和非依赖名称T2
将会发现在范围内A<int>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)