Sto provando ad implementare un adattatore iteratore inverso per le mie classi iteratore e const_iterator con un po 'di problemi. Se qualcuno potesse guidarmi attraverso questo, sarebbe molto apprezzato!adattatore reverse_iterator
L'idea è che dovrei essere in grado di creare un reverse-iteratore dal mio rbegin() e rend() chiama
reverse_iterator rbegin();
reverse_iterator rend();
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;
Sto utilizzando i seguenti typedef di nella classe:
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;
Come si può vedere, mi piacerebbe essere in grado di creare iteratori inversi usando modelli, dando alla classe reverse_iterator un iteratore o const_iterator.
Purtroppo, è questo pezzo mi sono bloccato sulla ...
Di seguito è la definizione di classe che ho attualmente, con gli errori.
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_;
};
ho mai usato modelli di simile prima, quindi è molto probabile che sto completamente equivoco come possono essere utilizzati ...
Dal momento posso essere un iteratore o un const_iterator, il typedef di riferimento e puntatore variano tra le due classi. Le linee che non stanno compilando sono queste:
I::reference operator*() const;
I::pointer operator->() const;
Non sono sicuro di quale altro modo posso fare il lavoro di classe uno reverse_iterator sia per iteratore e const_iterator se non sono in grado di fare I :: riferimento e I :: puntatore. Ho anche provato ad aggiungere template di fronte a coloro che, dal momento che sono definite nella classe iteratore (per esempio) come:
typedef T* pointer;
typedef T& reference;
+1 per il coraggio. –
Puntatore/riferimento arent definito come 'const T *' e 'const T &' in const_iterator che stai tentando di adattare? – gwiazdorrr
'template' è abbastanza vicino. Oggetti di scena. – Puppy