Por que reverse_iterator define duplamente seus tipos aninhados?
Parece que o adaptador iteradorreverse_iterator
duplamente define a maioria de seus tipos aninhados. Em particular, herda publicamente destd::iterator
que expõeiterator_category
, value_type
, difference_type
, pointer
ereference
. Exceto poriterator_category
evalue_type
, todos esses são explicitamentetypedef
ed novamente na definição de classe.
24.5.1.1 Modelo de classe 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
};
Pergunta, questão: por que a definição repetitiva? Isso é apenas para fins de exposição ou existe mais? E por que não redefiniriterator_category
evalue_type
?