Listing 1: Excerpt from the view's iterator interface.
template <typename RawIterator>
class view_iterator
{
public:
// note the additional dereference in the following methods
reference operator*()
{
return **raw_iterator_;
}
pointer operator->()
{
return *raw_iterator_;
}
reference operator[](int n)
{
return *(raw_iterator_[n]);
}
// "normal" iterator interface
view_iterator & operator++()
{
++raw_iterator_;
return *this;
}
view_iterator & operator--()
{
--raw_iterator_;
return *this;
}
// ...
private:
RawIterator raw_iterator_;
};