From: Thorsten Ottosen (thorsten.ottosen_at_[hidden])
Date: 2006-05-09 11:26:54
David Abrahams wrote:
> Thorsten Ottosen <thorsten.ottosen_at_[hidden]> writes:
>> In the new version, this is how range_iterator is defined:
>> namespace boost
>> template< typename C >
>> struct range_iterator
>> typedef BOOST_RANGE_DEDUCED_TYPENAME
>> mpl::if_< BOOST_DEDUCED_TYPENAME is_const<C>::type,
>> BOOST_DEDUCED_TYPENAME range_const_iterator<
>> type type;
>> } // namespace boost
> Well, I think the logic is probably right but I have to say the code
> looks a lot more complex than it probably ought to.
I think I can remove some partial specializations based on constness,
like you suggested, eg.:
template< class R >
const_iterator<R const> : const_iterator<R>
But besides that, what else do you think looks complicated?
(Constness has certainly been a major pain)
> There are lots of
> places where the current code could profit from refactoring; this
> might be another such place. For example, if you make range_iterator
> do the right thing always, (maybe) you could spell
> range_const_iterator as follows:
> template <class T>
> struct range_const_iterator
> : range_iterator<T const>
> It's just an example; you have to check it to make sure it works out.
> Anyway, I suggest you look hard for simplifying refactorings before
> you commit a big rewrite.
I the new design, range_iterator depends on two other traits:
your suggestion would make the design circular dependent.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk