模板方法中的iterator参数问题

时间:2014-03-30 15:17:34

标签: c++ templates c++11 vector unique-ptr

我正在尝试编写一个方法将unique_ptr从一个std :: vector传输到另一个。

template<typename T>
void transferOne(vector<std::unique_ptr<T> > &to, 
                 vector<std::unique_ptr<T> >::iterator what, 
                 vector<std::unique_ptr<T> > &from) {
    to.push_back(std::move(*what));
    from.erase(what);
}

Clang给我一个错误: 在依赖类型名称'vector&gt; :: iterator'

之前缺少'typename'

任何想法如何处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

正如 Clang 告诉你的那样,将 typename 放在迭代器类型前面:

template<typename T>
void transferOne(vector<std::unique_ptr<T> > &to, 
                 typename vector<std::unique_ptr<T> >::iterator what, 
                 vector<std::unique_ptr<T> > &from) {
    to.push_back(std::move(*what));
    from.erase(what);
}

关键字typename用于告诉编译器,vector<std::unique_ptr<T> >::iterator是一种类型。在没有实例化模板的情况下,编译器通常无法自行查找,因为模板vector可能存在特殊化,其中成员迭代器是静态变量代替。