【问题标题】:What's the point of boost::multi_index_container::index<Tag>::type?boost::multi_index_container::index<Tag>::type 的意义何在?
【发布时间】:2010-09-01 10:17:15
【问题描述】:

如果您有一个带有多个索引的boost::multi_index_container&lt; &gt;,显然有多种方法可以对其进行迭代——每个索引都定义了一种方法。例如,如果您有一个带有标签T 的索引,您可以从container.get&lt;T&gt;().begin() 迭代到container.get&lt;T&gt;().end()

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

现在我的问题是,既然multi_index_container&lt; &gt;::index&lt;T&gt; 似乎只存在于typedef index&lt;T&gt;::type,而index&lt;T&gt;::type 有已知成员,为什么index&lt;T&gt; 不typedef 这些成员?这将允许你写multi_index_container&lt;...&gt;::index&lt;T&gt;::iterator

同样,为什么multi_index_container&lt; &gt;::index_iterator&lt;T&gt; 不是迭代器? multi_index_container&lt; &gt;::index_iterator&lt;T&gt;::type 是,但为什么 Boost 选择嵌入式 typedef ?同样,::type 似乎只会增加混乱。

【问题讨论】:

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

标签: c++ boost typedef multi-index


【解决方案1】:

就个人而言,我认为这只是一个疏忽。尤其是像boost::multi_index_container&lt;T&gt; 这样的非平凡库。我经常发现我编写的代码本身并不是错误,但回想起来我觉得我本可以做得更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2015-01-09
    相关资源
    最近更新 更多