c++ - 声明采用模板参数的函数

标签 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;
}

最佳答案

大概,您的编译器告诉您问题出在哪里。我的说:

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/

相关文章:

c++ - Array of list<string>,插入一个字符串的行为很奇怪

c++ - 如何调用对象/构造函数以返回二维数组

c# - 从 C++、反向 P/Invoke、混合模式 DLL 和 C++/CLI 调用 C#

c++ - 如何让好友功能有内部链接

django - 外键和 Django 模板

c++ - 减少代码重复并用模板替换#define

c++ - 为什么 const 在这个模板结构中丢失了?

c++ - 如何在 QtCharts 中自动重新缩放轴?

javascript - 如何使 Resig 的微模板与 XHTML 兼容?

模板类上的 C++ 运算符重载