lee*_*mes 4 c++ iterator operator-overloading
我正在为适配器范围实现一个迭代器,它可以懒惰地评估原始范围内的某些东西.这意味着:取消引用迭代器应取消引用底层迭代器并对结果应用一些操作,然后返回该操作的结果.
T operator*() const {
return someOperation(*original_iterator);
}
Run Code Online (Sandbox Code Playgroud)
我operator->该如何实现类似的operator*呢?在查看其他迭代器的实现时,它们通常返回一个T*.但是我无法返回指针,因为"指向对象"是一个临时的,即时计算的.
在这种情况下通常的指导是什么?我可以简单地回来T吗?
虽然我个人不需要这个操作符(我也可以使用(*i).m而不是i->m标准算法似乎也不依赖于它们->),我希望我的迭代器严格遵循这个ForwardIterator概念,这个概念InputIterator需要特殊化.这个运营商的实施.
最简单的方法是使用Boost.Iterators来实现迭代器,它负责处理棘手的代码.
但Boost.Iterators使用的技术并不复杂.它看起来像这样:
template <typename T>
class proxy_holder {
T t;
public:
proxy_holder(const T& t) : t(t) {}
T* operator ->() const { return &t; }
};
class the_iterator {
// ...
proxy_holder<my_proxy> operator ->() const {
return proxy_holder<my_proxy>(**this);
}
};
Run Code Online (Sandbox Code Playgroud)
这取决于箭头操作符被链接的事实,即如果一个箭头操作符返回不是原始指针的东西,则依次调用箭头操作符,直到找到指针.