我什么时候应该在模板函数中使用typename?

时间:2014-05-04 02:08:24

标签: c++ templates c++11

根据this question,应添加typename告诉编译器iterator是一种类型(它是否正确?),例如

template <typename T>
void print(vector<T> &v) {
  for (typename vector<T>::const_iterator it=v.begin(); it!=v.end(); ++it)
    cout<<*it<<endl;
}

两个问题:

  1. 在什么情况下应该添加typename?有人可以给我另一个例子吗?

  2. C ++ 11中的auto可以替换所有这些typename xxx个案例吗?

1 个答案:

答案 0 :(得分:0)

  1. 当您引用其确切含义取决于模板参数的类型名称时。
  2. 不是全部,而是很多。 auto必须能够推断/推断出类型。在这样的事情:

    typename T:foo_t var;
    
  3. 例如,它不能。