gpt4 book ai didi

c++ - 限定依赖类型的 typedef

转载 作者:行者123 更新时间:2023-11-30 02:01:52 27 4
gpt4 key购买 nike

我阅读了关于如何在 C++ 中使用 typename 关键字的精彩总结:http://pages.cs.wisc.edu/~driscoll/typename.html

我仍然想知道一个特定的例子:

template<typename T> class Outer{
public:
class Inner1{
T t;
};
class Inner2{
int t;
};
};

template<typename T> void foobar(void)
{
std::list<Outer<T>::Inner1> l;
}

从上面链接的文字我明白我需要

std::list<typename Outer<T>::Inner1> l;

因为 Inner1 既是合格的又是依赖的。

但是:Inner2 还需要一个让我感到困惑的类型名:首先,似乎很清楚 Inner2 是一种类型(嗯,这对于 Inner1 来说已经很清楚了)。其次,Inner2 根本不依赖于 T。对于所有可能的 T,Inner2 将是相同的(类型)!

从模板内部使用限定类型后是否需要 typedef?是否依赖模板参数?

最佳答案

你的第二个假设是错误的。 Inner2 确实依赖于 T,因为每个 Outer 都有另一个 Inner2。如果你专注于 Outer,那就很清楚了:

template<> class Outer<char>{
public:
class Inner1{
T t;
};
typedef int Inner2;
};

即使您不专业,Outer<float>::Inner2Outer<long>::Inner2可能具有相同的布局、成员、名称等,但它们不是同一类型!想想接入-Outer<long>::Inner2可以访问 Outer<long>的私有(private)成员,Outer<float>::Inner2没有。

在下面的特化中 Inner2 甚至不是一个类型:

template<> class Outer<long double>{
public:
char Inner2(int);
};

关于c++ - 限定依赖类型的 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13720025/

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