Какой смысл повышения :: multi_index_container :: index <Tag>:: type? - PullRequest
5 голосов
/ 01 сентября 2010

Если у вас есть 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, кажется, добавляет только беспорядок.

1 Ответ

2 голосов
/ 01 сентября 2010

Лично я думаю, что это был просто недосмотр.Особенно с такой нетривиальной библиотекой, как boost::multi_index_container<T>.Я часто нахожу написанный мной код, который не является ошибкой как таковой , но мне кажется, что я мог бы быть лучше в ретроспективе.

...