boost :: multi_index_container :: index <tag> :: type?</tag>有什么意义

时间:2010-09-01 10:17:15

标签: c++ boost typedef multi-index

如果你有一个带有多个索引的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似乎只会增加混乱。

1 个答案:

答案 0 :(得分:2)

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