声明采用模板参数的函数

时间:2012-06-15 17:13:44

标签: c++ templates

我想定义一个带有模板参数的辅助函数。我试过为它做一个模板化的函数,但是它没有编译。知道我做错了什么吗?这是我试过的代码。

// 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;
}

1 个答案:

答案 0 :(得分:1)

据推测,您的编译器告诉您问题是什么。我说:

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();
相关问题