如果你有一个带有多个索引的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 :: ordered_index或者结构上相同的东西。例如。它将提供iterator
typedef和begin()
方法。
现在我的问题是,由于multi_index_container< >::index<T>
似乎只存在于typedef index<T>::type
,而index<T>::type
已知成员,为什么index<T>
不会键入这些成员?这样您就可以编写multi_index_container<...>::index<T>::iterator
。
同样,为什么multi_index_container< >::index_iterator<T>
不是迭代器? multi_index_container< >::index_iterator<T>::type
是,但Boost为什么选择嵌入式typedef?同样,::type
似乎只会增加混乱。
答案 0 :(得分:2)
就个人而言,我认为这只是一种疏忽。特别是对于boost::multi_index_container<T>
这样的非平凡的库。我经常发现我编写的代码不是本身的错误,但我觉得回想起来我可以做得更好。