5

如果您有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 或结构上等价的东西。例如,它将提供一个iteratortypedef 和一个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似乎只会增加混乱。

4

1 回答 1

2

就个人而言,我认为这只是一个疏忽。特别是对于这样一个重要的库,例如boost::multi_index_container<T>. 我经常发现我编写的代码本身不是错误,但回想起来我觉得我本可以做得更好。

于 2010-09-01T10:30:27.983 回答