私はテンプレートクラスLinkedListとTraversibleを作成する必要があります。 Class Traversibleは、あるコレクションクラスの索引付けと反復のための関数を宣言するインタフェースである必要があります。私はイテレーターのインターフェースを作る方法を正確には知らないので、LinkedListはそれを使うことができます。私は反復の関数を宣言するインターフェイス
template <class T, class U>
class ITraversible {
public:
virtual U begin() noexcept = 0;
virtual U end() noexcept = 0;
virtual T& operator[](int) = 0;
};
ようなものを考えていたし、その後、LinkedListのヘッダーファイルで、私はどうなる:
template <class T>
class LinkedList : public ITraversible<T,typename LinkedList<T>::iterator> {
struct node {
T data;
node* next, *prev;
explicit node(const T&);
void connect(node*);
};
node *head, *tail;
int n;
public:
/*************************ITERATOR************************/
class iterator : public std::iterator<std::bidirectional_iterator_tag, node*> {
typename LinkedList<T>::node* itr;
explicit iterator(node*) noexcept;
friend class LinkedList;
public:
iterator& operator++();
iterator operator++(int);
iterator& operator--();
iterator operator--(int);
bool operator==(const iterator&) const noexcept;
bool operator!=(const iterator&) const noexcept;
T& operator*() const noexcept;
T& operator->() const noexcept;
};
/**********************************************************/
LinkedList() noexcept;
LinkedList(std::initializer_list<T>);
LinkedList(const LinkedList&);
LinkedList(LinkedList&&) noexcept;
~LinkedList() noexcept;
LinkedList& operator=(LinkedList) noexcept;
template <class A>
friend void swap(LinkedList<A>&, LinkedList<A>&);
void add(const T&);
void removeAt(int);
int size() const noexcept;
bool operator==(const LinkedList&) const noexcept;
bool operator!=(const LinkedList&) const noexcept;
virtual T& operator[](int) override;
virtual iterator begin() noexcept override;
virtual iterator end() noexcept override;
};
をしかし、その後Traversableのテンプレートは、2つのパラメータを持っており、それが1つしかないはずです。 これは私がやるべきことですか?私はテンプレートとイテレータには新しいことを覚えておいてください。
なぜTraversibleテンプレートには1つのパラメータが必要ですか? –
このアサイメントでは、Traversableクラスを書く必要があると言います。 –
Nebeski