2010-09-01 41 views
5

如果你有一個帶有多個索引的boost::multi_index_container< >,顯然有多種迭代方法 - 每個索引定義一種方法。例如,如果您的索引標記爲T,則可以從container.get<T>().begin()重複爲container.get<T>().end()boost :: multi_index_container :: index <Tag> :: type是什麼意思?

如果您嘗試在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似乎只增加了混亂。

+0

我不得不在我們的代碼中查找這個,因爲我不知道:: type。看起來我們已經對它們進行了typedef,這樣它們就不會在實現中出現。所以沒有我的答案:我從來沒有遇到過問題,所以我從來不理解爲什麼...... – stefaanv 2010-09-01 10:49:40

回答

2

就我個人而言,我認爲這只是一個疏忽。尤其是對於這樣一個不平凡的庫,如boost::multi_index_container<T>。我經常發現我編寫的代碼不是本身的錯誤,但覺得我可以在回顧過程中做得更好。