Я пытаюсь реализовать адаптер с обратным итератором для своих классов итераторов и const_iterator с небольшим количеством проблем.Если бы кто-нибудь мог помочь мне в этом, я был бы очень признателен!
Идея состоит в том, чтобы я мог создать обратный итератор из вызовов функций rbegin () и rend ()
* 1004.*
Я использую следующие определения типов в классе:
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;
Как вы можете видеть, я хотел бы иметь возможность создавать обратные итераторы с использованием шаблонов, предоставляя классу reverse_iterator либо итераторили const_iterator.
К сожалению, я застрял именно на этом бите ...
Ниже приведено определение класса, которое у меня сейчас есть, с ошибками.
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_;
};
Я никогда раньше не использовал подобные шаблоны, так что вполне вероятно, что я совершенно не понимаю, как их можно использовать ...
Поскольку я могу быть итератором или const_iterator, typedef ссылки иуказатель варьируется между двумя классами.Вот строки, которые не компилируются:
I::reference operator*() const;
I::pointer operator->() const;
Я не уверен, как еще можно заставить один класс reverse_iterator работать как для итератора, так и для const_iterator, если я не могу сделать I ::ссылка и я :: указатель.Я также попытался добавить шаблон перед ними, так как они определены в классе итераторов (например) как:
typedef T* pointer;
typedef T& reference;