C++ 什么';s boost::multi_index_container::index<;标记>;::类型?

C++ 什么';s boost::multi_index_container::index<;标记>;::类型?,c++,boost,typedef,multi-index,C++,Boost,Typedef,Multi Index,如果您有一个包含多个索引的boost::multi_index_容器,显然有多种方法可以对其进行迭代-每个索引定义一种方法。例如,如果您有一个带有标记T的索引,则可以从container.get().begin()迭代到container.get().end() 如果尝试在for循环中执行此操作(并且没有C++0xauto),则迭代器的类型为multi\u index\u container::index::type::iterator。现在index::type将是boost::multi_i

如果您有一个包含多个索引的
boost::multi_index_容器<>
,显然有多种方法可以对其进行迭代-每个索引定义一种方法。例如,如果您有一个带有标记
T
的索引,则可以从
container.get().begin()
迭代到
container.get().end()

如果尝试在for循环中执行此操作(并且没有C++0x
auto
),则迭代器的类型为
multi\u index\u container::index::type::iterator
。现在
index::type
将是boost::multi_index::detail::ordered_index或结构上等效的东西。例如,它将提供一个
迭代器
typedef和一个
begin()
方法

现在我的问题是,既然
multi_index_container<>::index
似乎只存在于typedef
index::type
,而且
index::type
有已知的成员,为什么
index
typedef没有定义这些成员?这将允许您编写
多索引容器::索引::迭代器


类似地,为什么
multi_index_container<>::index_iterator
不是迭代器
multi_index_container<>::index_iterator::type
是,但是为什么Boost选择了嵌入式typedef?同样地,
::type
似乎只会增加混乱。

就个人而言,我认为这只是一个疏忽。特别是对于像
boost::multi_index_container
这样的非平凡库。我经常发现我编写的代码本身不是bug,但我觉得在回顾时我本可以做得更好。

我不得不在代码中查找这一点,因为我不知道::类型。似乎我们已经对它们进行了类型定义,所以它不会出现在实现中。所以我没有回答:我从来没有遇到过问题,所以我从来没有费心去理解为什么。。。