c++ - 如何编写一个将泛型迭代器作为参数的模板化函数
问题描述
我一直在写一个模板化的静态类。对于其中一种方法,我希望能够传入任何迭代器,而不仅仅是来自特定数据结构(如 List)的迭代器。
template <class T>
class Foo
{
public:
template<typename InputIterator>
static bool bar(T&, InputIterator start, InputIterator end);
};
template <class T, typename InputIterator>
bool Foo<T>::bar(T& data, InputIterator start, InputIterator end)
{
typename InputIterator::const_iterator it = start;
while(it != end)
{
//logic here
it++;
}
return true;
}
上面是我尝试过的一个例子,但是对于这个基本设计的不同变体,我不断收到各种编译器错误。
解决方案
定义嵌套成员函数模板的正确方法是:
template <class T>
template <typename InputIterator>
bool Foo<T>::inRange(T&, InputIterator start, InputIterator end)
{
typename InputIterator::const_iterator it = start;
while(it != end)
{
//logic here
it++;
}
return true;
}
推荐阅读
- c# - 在双分号之间添加空格的更好方法
- sh - /bin/sh Adding an element to the arguments array from within the script
- python-3.x - 多处理:maxtasksperchild 和 chunksize 冲突?
- node.js - 将发布请求从一个 Web 服务器发送到另一个
- mysql - 如何在 MYSQL 中选择具有不同值的行?
- java - 验证 javax.naming.NamingException:LDAP
- fluid - TYPO 在节内渲染节
- python - 为什么在运行连接测试时会出现 ModuleNotFoundError
- python - 如何使用python在chrome中打开特定链接
- python - 在控制台的两个输入之间运行一个函数