From: Eric Niebler (eric_at_[hidden])
Date: 2003-12-17 01:14:09


David Abrahams wrote:
>
> It's hard to imagine that any use of the new iterator adaptors should
> require more code than the old library did. I don't see any .hpp
> file patch either. What am I missing?
>

Perhaps I am just ignorant of how best to use the new iterator adaptors,
but I have found that I need to write more code with the new IA lib than
with the old. In xpressive, I wanted to make a derived const * look
like a base const * (slicing off the derived portion). With the old
iterators, it was a simple typedef:

     typedef ::boost::iterator_adaptor
         <
             derived const *,
             ::boost::default_iterator_policies,
             base,
             base const &,
             base const *
>
     const_iterator;

With the new iterators, I had to do define a class (with CRT!) and a
typedef (*):

     template< typename ValueT, typename MainIterT >
     struct backref_iterator
         : ::boost::iterator_adaptor
             <
                 backref_iterator< ValueT, MainIterT >,
                 MainIterT,
                 ValueT,
                 std::random_access_iterator_tag
>
     {
         typedef ::boost::iterator_adaptor
             <
                 backref_iterator< ValueT, MainIterT >,
                 MainIterT,
                 ValueT,
                 std::random_access_iterator_tag
>
         base_t;

         backref_iterator( MainIterT baseiter )
             : base_t( baseiter )
         {
         }
     };

     typedef backref_iterator
         <
             base const,
             derived const *
>
     const_iterator;

Clearly I'm not making the best use of the new iterator adaptors, right?
  Or am I?

-- 
Eric Niebler
Boost Consulting
www.boost-consulting.com
(*) Actually, I didn't write this.  Credit goes to Hartmut Kaiser, who 
helped me to get xpressive compiling with boost CVS.