【发布时间】:2013-08-24 12:50:49
【问题描述】:
我正在尝试编写一个模板,该模板将任何类型的向量的迭代器作为其参数。当我尝试编译以下内容时,它给了我一个no matching function call 错误。
#include <vector>
struct A { int x; };
template <class T>
void process (typename std::vector<T>::iterator begin,
typename std::vector<T>::iterator end)
{ for(; begin != end; begin++) { /*do_something*/ } }
int main()
{
std::vector <A> obj;
process(obj.begin(), obj.end());
}
【问题讨论】:
-
为什么要限制在容器中?如果可行,请使用随机访问迭代器。
-
简短版本:没有正确的语法 - 你不能从嵌套类型中推断出模板参数。
-
这个问题有六万亿次重复。
-
任何特殊原因您没有将迭代器类型本身作为模板参数,并使用 iterator_traits 提取底层值类型?
-
@MattMunson,标准算法通常采用
typename Iter作为迭代器类型,如果不兼容,则会吐出 500 行错误。如果您想要一个好的错误,您可以使用std::iterator_traits<Iter>::iterator_type或类似的东西输入static_assert。