声明采用模板参数的函数
declaring functions that take template parameters
我想定义一个接受模板参数的帮助程序函数。我尝试为此制作一个模板化函数,但它无法编译。知道我做错了什么吗?这是我尝试过的代码。
// 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();
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类