Если у вас есть boost::multi_index_container< >
с несколькими индексами, очевидно, есть несколько способов итерировать по нему - каждый индекс определяет свой путь.Например, если у вас есть индекс с тегом T
, вы можете выполнить итерацию от container.get<T>().begin()
до container.get<T>().end()
.
Если вы попытаетесь сделать это в цикле for (и у вас нет C ++ 0x auto
), тип итератора будет multi_index_container<...>::index<T>::type::iterator
.Теперь index<T>::type
будет boost :: multi_index :: detail :: order_index или чем-то структурно эквивалентным.Например, он предоставит iterator
typedef и begin()
метод.
Теперь мой вопрос, поскольку, похоже, multi_index_container< >::index<T>
существует только для typedef index<T>::type
, а index<T>::type
имеет известных членовпочему index<T>
не определяет typedef этих членов?Это позволит вам написать multi_index_container<...>::index<T>::iterator
.
Аналогично, почему multi_index_container< >::index_iterator<T>
не является итератором?multi_index_container< >::index_iterator<T>::type
есть, но почему Boost выбрал встроенный typedef?Снова ::type
, кажется, добавляет только беспорядок.