I am trying to implement a reverse iterator adapter for my iterator and const_iterator classes with little problems. If anyone could guide me through this, that would be very helpful!
The idea is that I should be able to create a reverse iterator from my rbegin () and rend () functions
reverse_iterator rbegin(); reverse_iterator rend(); const_reverse_iterator rbegin() const; const_reverse_iterator rend() const;
I use the following typedef type in the class:
typedef btree_iterator<T> iterator; typedef const_btree_iterator<T> const_iterator; typedef reverse_btree_iterator<iterator> reverse_iterator; typedef reverse_btree_iterator<const_iterator> const_reverse_iterator;
As you can see, I would like to be able to create reverse iterators using templates, providing the reverse_iterator class to either an iterator or const_iterator.
Sorry, this bit I'm stuck ...
The following is the class definition that I have with errors.
template <typename I> class reverse_btree_iterator { typedef ptrdiff_t difference_type; typedef bidirectional_iterator_tag iterator_category; public: reverse_btree_iterator() : base_(I()) {} template <typename T> reverse_btree_iterator(const btree_iterator<T>& rhs) : base_(rhs) {} I base() { return base_; } I::reference operator*() const; I::pointer operator->() const; I& operator++(); I operator++(int); I& operator--(); I operator--(int); bool operator==(const I& other) const; bool operator!=(const I& other) const; private: I base_; };
I have never used templates before, so most likely I donβt completely understand how they can be used ...
Since I can be an iterator or const_iterator, the typedef of the reference and pointer differ between the two classes. The lines that do not compile are as follows:
I::reference operator*() const; I::pointer operator->() const;
I'm not sure how else I can make one reverse_iterator class for an iterator and const_iterator if I cannot execute I :: reference and I :: pointer. I also tried adding a pattern in front of them, as they are defined in the iterator class (for example) as:
typedef T* pointer; typedef T& reference;