|
Boost Users : |
Subject: Re: [Boost-users] [fusion] iterating over a sequence with non-const references
From: Dave Abrahams (dave_at_[hidden])
Date: 2012-03-31 22:18:31
on Sat Mar 31 2012, paul Fultz <pfultz2-AT-yahoo.com> wrote:
> Hi,
> I would like to iterate over a sequence and preserve the
>
> reference/const/non-const of the elements. That is say I have
> a sequence like this:
>
> Â Â Â tuple<int&, int> seq;
>
> I would like to this to be true:
>
> Â Â Â typeof(deref(begin(seq))) == int&
> Â Â Â typeof(deref(next(begin(seq)))) == int&&
>
> It seems fusion sequences always return a const reference to
> the element. Is there a workaround to get it to work like this?
Trust me, you don't want that, for roughly the same reason you don't
want regular sequence rvalues to have rvalue-returning iterators:
https://groups.google.com/d/msg/comp.lang.c++.moderated/1BwNTHCFiOs/L1T3WC9T_kMJ
> Or is this just not possible with Boost.Fusion?
I think you'd need to create your own iterator fusion-style iterator for
this purpose.
> Furthermore, I would like to use the transformation algorithms
> (especially push_back, and push_front) and still preserve the
> reference type.
Sorry, I don't know what that means. How could using an algorithm
change a sequence's (or iterator's?) reference type?
> Is that possible, through some workarounds? Finally, would it still
> be fairly efficient when dealing with references, to copy the tuple
> and make a new tuple when doing algorithms such as push_back or
> push_front? Or is the lazy evaluation much more efficient than that?
This part is best answered by others.
-- Dave Abrahams BoostPro Computing http://www.boostpro.com
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