C++ - 关于模板

C++ - About template

当我使用如下模板时,g++会报错:


E32.cpp: 在函数‘void display_vector(const std::vector&, std::ostream&, int)’中:

E32.cpp:21:5: 错误:在‘std::vector::const_iterator’之前需要‘typename’,因为‘std::vector’是一个依赖范围 vector::const_iterator ^


template <typename elemType>                                                
void display_vector(const vector<elemType> &vec,
            ostream &os=cout, int len=8)
{
    vector<elemType>::const_iterator
        iter = vec.begin(),
        end_it = vec.end();
    int elem_cnt = 1;
    while(iter != end_it)
    {
        os << *iter++ << (!(elem_cnt++ % len)?'\n':' ');
    }
    os << endl;
}

为什么?我想不通...

此处使用typename

typename vector<elemType>::const_iterator

因为const_iterator是一个从属名(也显示在错误信息中)。搜索此站点以了解有关 dependent-name 的更多信息。

最好使用 auto 和基于范围的 for 循环。