我想定义一个带有模板参数的辅助函数。我已经尝试为此制作一个模板化函数,但它无法编译。知道我做错了什么吗?这是我试过的代码。
// vectors are great, but lack a find method. Implement one as a helper.
template<class T> bool vec_find(vector<T> &v, T obj)
{
vector<T>::iterator s;
for (s = v.begin(); s < v.end(); s++)
{
if (*s == obj)
{
return true;
}
}
return false;
}
最佳答案
大概,您的编译器告诉您问题出在哪里。我的说:
test.cpp:7:5: error: need ‘typename’ before ‘std::vector<T>::iterator’ because ‘std::vector<T>’ is a dependent scope
所以要修复它,添加 typename
之前vector<T>::iterator
:
typename vector<T>::iterator s;
^^^^^^^^
通常,只要类型名称的范围取决于模板参数,您就需要;在模板被实例化之前,编译器不知道如何 vector<T>
将被定义,因此需要被告知其范围内的名称指的是一种类型而不是其他东西。
但是,vector
有一个很好的理由没有 find
方法:C++ 库将容器与作用于它们的算法分开,这样任何算法都可以作用于任何合适的序列。你想使用 std::find
为此:
return std::find(v.begin(), v.end(), obj) != v.end();
关于c++ - 声明采用模板参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11055307/