我编写了一个玩具程序,它定义了一个模板化函数,该函数以std::vector<T>
和std::vector<T>::size_type
为参数。
这是工作代码:
#include <iostream>
#include <vector>
template <typename T>
std::vector<T> foo(std::vector<T> v, typename std::vector<T>::size_type n) {
n = std::min(v.size(), n);
return std::vector<T>(v.begin(), v.begin()+n);
}
int main() {
std::vector<int> v{1,2,3,4,5};
v = foo(v, 3);
for (auto i: v) std::cout << i << " "; std::cout << "n";
}
当我在std::vector<T>::size_type
编译失败之前遗漏了typename
时,产生了这个错误:
test.cc:5:54: error: ‘std::vector<T, std::allocator<_CharT> >::size_type’ is not a type
std::vector<T> foo(std::vector<T> v, std::vector<T>::size_type n) {
^
我想知道为什么会这样?有人能解释一下为什么这里需要typename
吗?
您需要typename
,因为std::vector::size_type是一个依赖的名称。