dee*_*iip 5 c++ templates types
手动我可以创建一个std::vector<int>::iterator像这样的对象:
std::vector<int>::iterator i;
Run Code Online (Sandbox Code Playgroud)
所以这std::vector<int>::iterator是一种类型.但是当我写一个函数时:
template <class T>
std::vector<T>::iterator foo(std::vector<int>::iterator i)
{
return i;
}
Run Code Online (Sandbox Code Playgroud)
编译器显示警告:
std::vector<T>::iterator' : is a dependent name not a type
Run Code Online (Sandbox Code Playgroud)
并且代码不会编译.但是如果在main中我调用这样的函数:
int main()
{
vector<int> v;
foo(v.begin());
}
Run Code Online (Sandbox Code Playgroud)
T应该解析该参数.那为什么编译器显示错误?
你必须在它前面加上 Typename 前缀,它
std::vector<T>::iterator依赖于模板参数,即T。因此,你应该在它前面加上 typename 前缀: 尝试使用:
typename std::vector<T>::iterator
Run Code Online (Sandbox Code Playgroud)
您可以参考此: http: //pages.cs.wisc.edu/~driscoll/typename.html