模板化类嵌套类型typename

oli*_*bre 1 c++ templates typedef nested-class typename

我要声明的Itertypename,但没有typedef.
然后,我不能Iter在我的template class声明中使用=>令人沮丧:(请教
我如何使用Iter,或者解释我为什么C++如此讨厌 ......

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)
Run Code Online (Sandbox Code Playgroud)
  1. 为什么typedef不能用来申报Iter?为什么不?
  2. 如何使用Itertemplate class?(例如作为函数参数类型)

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

Lyu*_*lev 7

  1. typedef可以和它一起使用typename.所以它变成:

    typedef typename vec::iterator Iter;
    
    Run Code Online (Sandbox Code Playgroud)
  2. Iter现在就用吧.

    template <typename T>
    struct MyContainer
    {
      typedef  std::vector<T>         Vec;
      typedef typename Vec::iterator  Iter;
    
      void Foo (Iter);   //ok
      Iter Bar ();       //ok
    };
    
    Run Code Online (Sandbox Code Playgroud)