|
Boost Users : |
From: David Abrahams (dave_at_[hidden])
Date: 2003-01-28 18:41:51
"Rob Smallshire" <rob_at_[hidden]> writes:
> Boosters,
>
> I have implemented a 'virtual container' class (i.e. it looks and behaves
> like it contains Objects, but it fact it doesn't) which implements an
> iterator interface of what are essentially bidirectional iterators.
>
> The iterators I have now are not STL compliant and I only have 'mutable'
> versions of the iterators, with no corresponding const iterators.
>
> Some guidance on how to make the best use of boost::iterator adapter would
> be appreciated to create fully STL compliant iterator/const_iterator pairs:
>
> 1) Out current iterators (i.e. the Base type which will be adapted) return
> smart reference objects when dereferenced, rather than true C++ references
> to objects. Will iterator adapter work in this situation?
Yes, but for conformance you'd better not give them a category higher
than "input iterator". Forward iterators and above cannot return
proxies from their dereference operators. They can still support
decrement, but their iterator_category must be
std::input_iterator_tag.
The Boost sandbox contains support for a whole range of new iterator
categories that will support proxy iterators without masking their
traversal capabilities.
> 2) Furthermore, can I use the iterator_adapter to adapt our
> home-grown mutable iterator into a STL compliant const_iterator? Do
> I simply modify the Reference of the iterator_adapter template type
> to be a const version of my smart-reference class?
There aren't sufficient details here to say with absolute certainty,
but in principle that should work.
-- David Abrahams dave_at_[hidden] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net