为什么在函数参数列表中重复typename关键字是必要的



我编写了一个玩具程序,它定义了一个模板化函数,该函数以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是一个依赖的名称。

相关内容

  • 没有找到相关文章

最新更新