약간의 문제가있는 iterator 및 const_iterator 클래스의 역방향 반복기 어댑터를 구현하려고합니다. 누군가가 이것을 통해 나를 인도 할 수 있다면 크게 환영 할 것입니다!reverse_iterator adapter
:아이디어는 내가 (내 rbegin에서 역 반복자를 생성 할 수 있어야한다) 및 렌드() 함수 나 클래스에 다음과 같은 형식 정의의의를 사용하고
reverse_iterator rbegin();
reverse_iterator rend();
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;
를 호출하는 것입니다
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를 만들 수 있고 reverseeriter 클래스에 iterator 또는 const_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_;
};
것은
... 내가 전에 다음과 같은 템플릿을 사용한 적이, 그래서 나는 완전히 그들이 사용할 수있는 방법을 오해하고있어 가능성이 매우 높다 참조와 포인터의 typedef는 두 클래스간에 다양합니다. 컴파일되지 않은 라인은 다음과 같습니다
I::reference operator*() const;
I::pointer operator->() const;
내가 I를 할 :: 참조를 할 수 아니에요 만약 내가 반복자와 const_iterator를 모두 하나의 reverse_iterator 수준의 작업을 할 수있는 방법 다른 모르겠어요 및 I :: 포인터. 그들은으로 (예를 들어) 반복자 클래스에 정의되어 있기 때문에 나는 또한 그 앞에 템플릿을 추가하는 시도 :
typedef T* pointer;
typedef T& reference;
+1 용감성. –
적응하려고하는 const_iterator의'const T *'와'const T &'로 정의 된 Arent 포인터/참조? – gwiazdorrr
'template'는 꽤 가깝습니다. 소품. – Puppy