Каковы типичные варианты использования of an iterator_trait

Я новичок в C ++, так что терпите меня. Я пытаюсь понять STL iterator_traits. В книге "The C ++ Stand" ard Library "структура iterator_traits определяется следующим образом:

template <class T>
struct iterator_traits{
  typedef typename T::value_type value_type
  typedef typename T::difference_type difference_type
  typedef typename T::iterator_category iterator_category
  typedef typename T::pointer pointer
  typedef typename T::reference reference
}

Мне кажется, что она повторно раскрывает подтипы, которые уже были доступны в T . Продвигаясь дальше, книга дает пример того, как его использовать, который выглядит примерно так:

template <class MyIterator>
void do_something(MyIterator start, MyIterator end) {
    typedef typename iterator_traits<MyIterator>::value_type value_type
    value_type v = *start
    .....

Мой вопрос: зачем мне здесь нужна эта структура iterator_traits, если идея заключалась в получении value_type , не мог ли я получить его напрямую из MyIterator ? Мое замешательство, кажется, возникает из-за моего (безусловно, неверного)понимание того, что информация о подтипах должна быть получена из шаблона , используемого для создания экземпляра iterator_trait. Так что, если бы вы могли объяснить, и желательно на примере, зачем и где мне нужен iterator_traits, это было бы очень полезно.

21
задан James McNellis 20 July 2011 в 05:53
поделиться