模板方法中的迭代器参数出现问题



我正在尝试编写一种方法来将unique_ptr从一个std::vector转移到另一个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给了我一个错误:依赖类型名称"向量>::迭代器"之前缺少"类型名"

有什么想法如何处理吗?

正如 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的专用化,其中成员迭代器是一个静态变量。

最新更新