我尝试用谷歌搜索这个问题,但无法找到合适的答案。任何 C++ 大师都可以告诉我为什么 C++ 要求你声明 OuterClass<T>
::带有 typename 关键字的内部类?
我是数据结构课程的助教,我总是看到这个错误。我知道告诉我的学生他们需要将 typename 放在返回类型前面,但我无法解释为什么需要这样做。
Thanks.
这是因为模板中的两阶段名称查找。当编译器看到 Innerclass 时,它必须知道该名称是否是类型(例如,对于 OuterClass 的某些特化,可以是 int 类型的静态成员)。所以它假设它不是一个类型名称,除非你这么说。 typename 必须在模板中使用,并且只能用于依赖于模板参数的名称。华泰
example:
template <class T>
class X
{
typedef T XXX;
};
template<>
class X<char>
{
static int XXX;
};
template<class T>
class Y
{
// X<T>::XXX member; invalid XXX is not assumed to be a type!
typename X<T>::XXX member;
//we explicitly specify that XXX is a type; Later, upon instantiation, we will verify that
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)