问题描述
我想创建一个函数,它以容器 T(可以是向量、映射、列表...)作为模板,以 T 和 Int 作为参数,在这个函数中,我们假设 T 是一个容器的 int,我想返回 int 在容器中的第一次出现。这是函数:
template <class T> int & easyfind(T container,int n)
{
typename T<int>::iterator it;
for (it = container.begin(); it != container.end(); it++)
if (*it == n)
return (*it);
throw (NotFoundException());
}
但是编译器说“期望在 'typename' 之后有一个限定名称”,当我用 typename
替换 class
时,编译器说“非模板类 'T' 的显式特化”,我怎样才能让它工作?
解决方法
T
是一种类型,而不是模板。你需要
typename T::iterator it;
访问其 iterator
类型成员。
你看到类似代码的原因
std::vector<int>::iterator
是因为std::vector
是模板名,需要指定模板参数。在您的情况下,T
已经是模板的实例,因此无需指定参数。