У меня проблема при чтении реализации итератора списка SGI STL.
template<class T>
struct __list_node {
void *prev;
void *next;
T data;
};
template<class T, class Ref, class Ptr>
struct __list_iterator {
typedef __list_iterator<T, T&, T*> iterator;
typedef __list_iterator<T, Ref, Ptr> self;
...
typedef T value_type;
typedef Ptr pointer;
typedef Ref reference;
typedef __list_node<T>* link_type;
...
link_type node;
...
reference operator*() const { return (*node).data; }
pointer operator-> const { return &(operator*()); }
self& operator++() { ... }
self operator++(int) { ... }
...
...
};
Итак, почему существует три аргумента шаблона?
Что если существует только class T
? Что-то нравится ниже.
template<class T>
struct __list_iterator {
typedef __list_iterator<T> iterator;
typedef __list_iterator<T> self;
...
typedef T value_type;
typedef T* pointer;
typedef T& reference;
...
...
};
Интересно, является ли три аргумента обязательным для какой-то конкретной class T
или по какой-то причине, которую я не могу понять.
Надеюсь, кто-нибудь может мне помочь. Большое спасибо!