我正在尝试编写一个方法将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>
答案 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
可能存在特殊化,其中成员迭代器是静态变量代替。