我试图实现一个封装另一个迭代器并执行范围检查的迭代器。因此,我从那个Iterator扩展如下:
template<typename ITERATOR_T>
class r_iterator : public ITERATOR_T {
//...
r_iterator (ITERATOR_T begin, ITERATOR_T end) {
this->begin = begin;
this->end = end;
}
};
我想使用构造函数中传递的迭代器来执行范围检查。我的想法是将&#34; this&#34; -iterator(即r_iterator)指向的东西设置为&#34; begin&#34;指向的元素。构造函数的迭代器。我想这样做我可以覆盖某些方法,比如operator ++,例如,执行范围检查,然后调用类I的超级方法扩展。
我想知道是否有可能以某种方式设置元素&#34;这个&#34; -iterator(r_iterator)指向我假设我扩展了一些STL Iterator类。
遗憾的是,我无法在c ++参考资料中找到任何相关信息。
问候并谢谢
答案 0 :(得分:0)
没有必要继承,你可以编写一个这样的简单包装类:
#include <iostream>
#include <vector>
#include <stdexcept>
template <typename Iterator>
class MyIterator
{
Iterator _begin;
Iterator _end;
Iterator _cur;
public:
explicit MyIterator(Iterator begin, Iterator end)
: _begin(begin), _end(end)
{
_cur = _begin;
}
bool has_next() const
{
return (_cur != _end);
}
void operator++(int dummy)
{
if (!has_next())
throw std::out_of_range("Out of range.");
_cur++;
}
};
int main(int argc, char* argv[])
{
std::vector<int> v = {1, 2, 3};
MyIterator<std::vector<int>::iterator> my_it(v.begin(), v.end());
my_it++;
my_it++;
my_it++;
my_it++;
return 0;
}