gpt4 book ai didi

c++ - 模板类嵌套类型 typename

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:23 27 4
gpt4 key购买 nike

我必须将 Iter 声明为 typename 而不是 typedef
然后,我不能在我的 template class 声明中使用 Iter => 令人沮丧:(
请教我如何使用 Iter,或者解释一下为什么 C++ 如此 nasty ...

template <typename T>
struct MyContainer
{
typedef std::vector<T> Vec;
typename Vec::iterator Iter;

void Fo (typename std::vector<T>::iterator); //ok
typename std::vector<T>::iterator Ba(); //ok

void Foo (Iter); //error: 'Iter' is not a type
Iter Bar (); //error: 'Iter' does not name a type
}; //(gcc 4.1.2)
  1. 为什么typedef不能用来声明Iter?为什么不呢?
  2. 如何在 template class 中使用 Iter? (例如作为函数参数类型)

编辑
在指令typename Vec::iterator Iter;中关键字typename表示Vec::iterator 是一种类型(即不是静态成员函数/属性)。因此,Iter 没有声明为类型,而是声明为使用 Vec::iterator 类型的变量。

最佳答案

  1. typedef 可以与 typename 一起使用。于是就变成了:

    typedef typename vec::iterator Iter;
  2. 现在就用Iter吧。

    template <typename T>
    struct MyContainer
    {
    typedef std::vector<T> Vec;
    typedef typename Vec::iterator Iter;

    void Foo (Iter); //ok
    Iter Bar (); //ok
    };

关于c++ - 模板类嵌套类型 typename,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12969854/

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