gpt4 book ai didi

C++ 类型名和内部类

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:35 29 4
gpt4 key购买 nike

我尝试用谷歌搜索这个,但无法得出合适的答案。任何 C++ 专家都可以告诉我为什么 C++ 要求您声明 OuterClass <T>::带有 typename 关键字的内部类?

我是数据结构类(class)的助教,我经常看到这个错误。我知道告诉我的学生他们需要将类型名放在返回类型的前面,但我无法解释为什么需要这样做。

谢谢。

最佳答案

那是因为模板中的两阶段名称查找。当编译器看到 Innerclass 时,它必须知道该名称是否是一个类型(例如,对于 OuterClass 的某些特化,它可能是 int 类型的静态成员)。所以它假设它不是类型名称,除非你这么说。 typename 必须在模板中使用,并且只能用于依赖于模板参数的名称。

例子:

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
};

关于C++ 类型名和内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3934692/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com