Yineleyici ve const_iterator sınıfları için bir sorun çözücü adaptörünü biraz sorunla uygulamaya çalışıyorum. Eğer bu konuda bana yol gösterebilecek biri varsa, bu çok takdir edilecektir!reverse_iterator bağdaştırıcısı
:fikri (benim rbegin gelen bir ters-yineleyici oluşturmak mümkün olmalıdır) ve parçalamak() işlevi sınıfta aşağıdaki typedef 's kullanıyorum
reverse_iterator rbegin();
reverse_iterator rend();
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;
çağırır olmasıdır
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;
Gördüğünüz gibi, reverse_iterator sınıfını bir yineleyici veya const_iterator veren şablonlar kullanarak ters yineleyiciler oluşturabilmek istiyorum.
Ne yazık ki, ben şaşırıp bu biraz ... Aşağıda
hataları ile şu anda var sınıf tanımı, olmasıdır. Bir yineleyici ya da const_iterator olabilir beri
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_;
};
... Daha önce böyle şablonları hiç kullanmadıysanız, yüzden ben tamamen onlar nasıl kullanılabileceğini yanlış anlama ediyorum çok muhtemeldir Referans ve işaretçi typedef iki sınıf arasında değişir. derleme olmayan hatlar şunlardır:
I::reference operator*() const;
I::pointer operator->() const;
Ben I yapmak :: referansı mümkün değilim ben yineleyici ve const_iterator ikisi için bir reverse_iterator sınıfı uygulayabiliriz başka nasıl emin değilim ve Ben işaretçi ::. onlar (örneğin) iterasyon sınıfında tanımlanır çünkü, aynı zamanda, bu ön şablonu ilave çalıştı:
typedef T* pointer;
typedef T& reference;
+1. –
Arızalı işaretçi/başvuru const_iterator'da const Tite ve const Tite 'olarak tanımlandı mı? – gwiazdorrr
'template' oldukça yakın. Dikmeler. Stl :: reverse_iterator öğesine işaret etmek için – Puppy