【发布时间】:2010-09-01 10:17:15
【问题描述】:
如果您有一个带有多个索引的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> 不typedef 这些成员?这将允许你写multi_index_container<...>::index<T>::iterator。
同样,为什么multi_index_container< >::index_iterator<T> 不是迭代器? multi_index_container< >::index_iterator<T>::type 是,但为什么 Boost 选择嵌入式 typedef ?同样,::type 似乎只会增加混乱。
【问题讨论】:
-
我不得不在我们的代码中查找它,因为我不知道 ::type。似乎我们已经对它们进行了类型定义,所以它没有出现在实现中。所以我没有回答:我从来没有遇到过问题,所以我从不费心去理解为什么......
标签: c++ boost typedef multi-index