如果您有boost::multi_index_container< >
多个索引,显然有多种方法可以对其进行迭代 - 每个索引都定义了一种方式。例如,如果你有一个带有 tag 的索引,你可以从toT
迭代。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::ordered_index 或结构上等价的东西。例如,它将提供一个iterator
typedef 和一个begin()
方法。
现在我的问题是,既然multi_index_container< >::index<T>
似乎只存在于 typedefindex<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
似乎只会增加混乱。