声明采用模板参数的函数

declaring functions that take template parameters

本文关键字:参数 函数 声明      更新时间:2023-10-16

我想定义一个接受模板参数的帮助程序函数。我尝试为此制作一个模板化函数,但它无法编译。知道我做错了什么吗?这是我尝试过的代码。

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

因此,要修复它,请在vector<T>::iterator之前添加typename

typename vector<T>::iterator s;
^^^^^^^^

通常,每当类型名称的作用域依赖于模板参数时,您都需要这样做;在模板实例化之前,编译器不知道如何定义vector<T>,因此需要被告知其中的作用域名称是指类型而不是其他内容。

但是,vector没有find方法有一个很好的理由:C++库将容器与作用于它们的算法分开,以便任何算法都可以作用于任何合适的序列。您希望为此使用std::find

return std::find(v.begin(), v.end(), obj) != v.end();