gpt4 book ai didi

c++ - 类内部模板化类的 Typedef

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:48 27 4
gpt4 key购买 nike

我想知道为什么下面的代码有效:

template <class T>
class A {
public:
typedef A* Pointer;
typedef A<T>* OtherPointer;
};

int main()
{
A<double> a;
A<double>::Pointer b = &a;
A<double>::OtherPointer c = &a;
std::cout << b << " " << c << std::endl;
}

OtherPointer 的语法对我来说看起来合乎逻辑。我想知道关于 Pointer 的那个。类的名称是否隐含在类定义中的模板化类型?如果是这样,为什么其他语法也有效?

最佳答案

之所以有效,是因为在类模板中 A<T> , 类型名称 A是完整描述类型的别名 A<T> .您上面的模板定义等同于:

template <class T>
class A {
public:
typedef A<T>* Pointer;
typedef A<T>* OtherPointer;
};

当你这样写的时候可以看到,A<T>::PointerA<T>::OtherPointertypedef s 表示同一类型(即 A<T> 本身)。因此,您的示例编译成功。

其他人可能能够引用标准的相关部分。应该说我知道这是一个特别的领域,我过去曾在一些较旧的编译器中看到过错误,其中 A不被视为等同于 A<T>在模板定义中。

关于c++ - 类内部模板化类的 Typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26509820/

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