Почему reverse_iterator вдвойне определяет свои вложенные типы?
Похоже, что адаптер итератораreverse_iterator
вдвойне определяет большинство его вложенных типов. В частности, оно наследуется публично отstd::iterator
который выставляетiterator_category
, value_type
, difference_type
, pointer
а такжеreference
, За исключениемiterator_category
а такжеvalue_type
все это явноtypedef
'снова в определении класса.
24.5.1.1 Шаблон класса reverse_iterator [reverse.iterator]
namespace std {
template <class Iterator>
class reverse_iterator : public
iterator<typename iterator_traits<Iterator>::iterator_category,
typename iterator_traits<Iterator>::value_type,
typename iterator_traits<Iterator>::difference_type,
typename iterator_traits<Iterator>::pointer,
typename iterator_traits<Iterator>::reference> {
public:
typedef Iterator iterator_type;
typedef typename iterator_traits<Iterator>::difference_type difference_type;
typedef typename iterator_traits<Iterator>::reference reference;
typedef typename iterator_traits<Iterator>::pointer pointer;
// ... rest of the class
};
Вопрос: почему повторное определение? Это только для целей изложения или есть что-то еще? И почему бы не переопределитьiterator_category
а такжеvalue_type
?