From: Robert Ramey (ramey_at_[hidden])
Date: 2006-07-06 12:17:14
David Abrahams wrote:
> "Robert Ramey" <ramey_at_[hidden]> writes:
>> David Abrahams wrote:
>>> "Robert Ramey" <ramey_at_[hidden]> writes:
>>> How are these different from many of the iterators provided by
>>> http://www.boost.org/libs/iterator, particularly transform_iterator?
>> http://www.boost.org/libs/serialization/doc/index.html describes
Whoops - try http://www.boost.org/libs/serialization/doc/dataflow.html
>> All the "dataflow iterators" are derived from boost.iterator. For
>> some I derived from transform iterator for others I derived
>> from filter and I forget the rest.
> I don't know what you mean by "derived" but if you're referring to
> regular C++ derivation, that generally doesn't result in a legal
> iterator class. For example, the result type of operator++ is usually
That's what I'm referring to. And it has required extra effort
to make operator++ work correctly.
>> Aside from implementing the transforming behavior required
>> for the specific instance, the only real addition is the
>> requirement that all of them have a templated constructor.
> Details would be helpful here.
See the above link.
>> This simple addition made all the difference for me.
>> This permitted me to compose them to any ressonable
>> depth and sequence with just one (rather long)
>> typedef into a new iterator which can be used
>> just as easily as any other.
> The existing iterator adaptors are easily composed, so I'd like to
> know a little more about what you did, and gained.
I wanted to be able do things like the following:
a) define an iterator for transforming 8 bit octets into 6 bit octets
b) define an iterator which would render 6 bit octets into ascii
codes as used in base64 coding
c) define an iterator which would insert line breaks every 50 characters
I wanted to be able to develope and test each of these separately.
so far no real problem with the boost iterators.
Then I wanted to compose them with a typedef
const char *,
,const char // cwpro8 needs this
Wow - just great. Now just construct an instance of base64_text - and we're
in business. So I can do:
char * address; // pointer to character buffer
address + count
Uh - oh - I can do the above - because I need to instanciate the iterator
some sort of make_???_iterator. This an extra pain and adds a lot of
It also prevents me from doing something like:
address + count
should I find this convenient.
By adding the templated constructors and using them instead of
I was able to achieve what I desired.
>> I've never been able to convince anyone else
>> of the merit of the approach - but hope springs eternal.
> Maybe you never articulated sufficiently clearly what you added to the
> basics provided by the iterator library, and why.
LOL - apparently so.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk