Próbuję zaimplementować adapter odwrotnego iteratora dla moich klas iteratora i const_iterator z niewielkimi problemami. Gdyby ktokolwiek mógł mnie przez to prowadzić, byłbym bardzo wdzięczny!adapter_wersja_wersji
Chodzi o to, że powinienem być w stanie stworzyć odwrotny-iterację z mojego rbegin() i rend() funkcja zwraca
reverse_iterator rbegin();
reverse_iterator rend();
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;
Używam następujące typedef w klasie:
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;
Jak widać, chciałbym móc tworzyć odwrócone-iteratory za pomocą szablonów, nadając klasie reverse_iterator albo iterator albo const_iterator.
Niestety, jest to nieco utknąłem na ...
Poniżej definicja klasy, że obecnie mam, z błędami.
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_;
};
Nigdy nie stosować szablony jak to wcześniej, więc jest bardzo prawdopodobne, jestem całkowicie nieporozumienia w jaki sposób mogą być wykorzystane ...
Ponieważ mogę być iterator lub const_iterator The typedef odniesienia i wskaźnik różnią się w zależności od klasy. Linie, które nie są kompilacją są takie:
I::reference operator*() const;
I::pointer operator->() const;
Nie jestem pewien, jak jeszcze mogę uczynić pracę Klasy reverse_iterator zarówno iterator i const_iterator jeśli nie jestem w stanie zrobić I :: odniesienia i I :: wskaźnik. Próbowałem też dodanie szablonu przed tymi, ponieważ są one zdefiniowane w klasie iteratora (na przykład) jako:
typedef T* pointer;
typedef T& reference;
+1 za odwagę. –
Arent wskaźnik/odwołanie zdefiniowane jako "const T *" i "const T &" w const_iterator, który próbujesz zaadaptować? – gwiazdorrr
"Szablon" jest całkiem blisko. Rekwizyty. – Puppy