我正在尝试编写一种方法来将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
的专用化,其中成员迭代器是一个静态变量。