
Hello David, Wednesday, May 9, 2007, 8:27:53 PM, you wrote:
on Tue May 08 2007, Andrey Semashev <andysem-AT-mail.ru> wrote:
Hello,
Quite often I find myself writing an is_const_iterator trait which looks like this:
[snip]
Maybe it is worth adding to Boost.Iterators library? Or maybe there already is something like that?
What's it useful for?
Mostly I used it to implement my iterators for some adopted STL-like containers. It shortens the iterator_facade template parameters list: template< NodeItT > struct MyIterator : public iterator_facade< MyIterator< NodeItT >, typename mpl::if_< is_const_iterator< NodeItT >, const value_type, value_type >::type, typename iterator_category< NodeItT >::type > { }; Here NodeItT is an adopted container iterator (const or not). It iterates over nodes that are not value_type. MyIterator extracts value_types from nodes on dereferencing (this logic may be tricky). Another use case is different iterators translation to each other. It came handy when I had to implement something like multi_index_container iterator projecting: template< int Index, typename SrcItT > typename mpl::if_< is_const_iterator< SrcItT >, typename nth_index< Index >::const_iterator, typename nth_index< Index >::iterator
::type project(SrcItT it);
-- Best regards, Andrey mailto:andysem@mail.ru