2010-09-01 17 views
5

Si vous avez un boost::multi_index_container< > avec plusieurs index, il y a évidemment plusieurs façons de parcourir: chaque index définit un chemin. Par exemple, si vous avez un index avec l'étiquette T, vous pouvez itérer de container.get<T>().begin() à container.get<T>().end(). Si vous essayez de le faire dans une boucle for (et que vous n'avez pas C++ 0x auto), le type de l'itérateur est multi_index_container<...>::index<T>::type::iterator. Maintenant index<T>::type sera boost :: multi_index :: detail :: ordered_index ou quelque chose de structurellement équivalent. Par exemple. il fournira un typedef iterator et une méthode begin().Quel est le point de boost :: multi_index_container :: index <Tag> :: type?

Maintenant, ma question est, puisque multi_index_container< >::index<T> ne semble exister que pour typedef index<T>::type et index<T>::type a des membres connus, pourquoi ne index<T> typedef ces membres? Cela vous permettrait d'écrire multi_index_container<...>::index<T>::iterator.

De même, pourquoi multi_index_container< >::index_iterator<T> n'est-il pas un itérateur? multi_index_container< >::index_iterator<T>::type est, mais pourquoi Boost a-t-il choisi un typedef incorporé? Encore une fois le ::type semble ajouter seulement le fouillis.

+0

J'ai dû chercher ça dans notre code parce que je ne connaissais pas le type ::. Il semble que nous les ayons tous typés, de sorte qu'ils n'apparaissent pas dans la mise en œuvre. Donc pas de réponse de ma part: je n'ai jamais eu de problème avec ça donc je n'ai jamais pris la peine de comprendre pourquoi ... – stefaanv

Répondre

2

Personnellement, je pense que c'était juste un oubli. Surtout avec une telle bibliothèque non triviale telle que boost::multi_index_container<T>. Je trouve souvent le code que j'ai écrit qui ne sont pas des bugs en soi, mais je pensais que j'aurais pu faire mieux en rétrospective.