Boost logo

Boost Users :

From: Daniel Gehriger (gehriger_at_[hidden])
Date: 2007-05-24 13:43:56


Eric Niebler wrote:
>
> This is by design. get_vector_float() returns a temporary object. You
> can't modify it.
> --snip--
>

Yes, shortly after my post I came to the same conclusion. Thank you for your
reply, though!

My I suggest an addition to BOOST_FOREACH ?

I happen to work with custom containers whose iterators are invalidated when
certain member functions are called on the contained objects. So I typically
use a loop pattern as follows:

-------------------
for (Coll::iterator it = col.begin(); it != col.end(); /* noop */)
{
    Coll::value_type& o = *(it++);
    o.destroy();
}
-------------------

I adapted the BOOST_FOREACH pattern to implement this pattern:

-------------------
#define FOREACH_PRE(VAR, COL)
\
    BOOST_FOREACH_PREAMBLE()
\
    if (boost::foreach_detail_::auto_any_t _foreach_col =
BOOST_FOREACH_CONTAIN(COL)) {} else \
    if (boost::foreach_detail_::auto_any_t _foreach_cur =
BOOST_FOREACH_BEGIN(COL)) {} else \
    if (boost::foreach_detail_::auto_any_t _foreach_end =
BOOST_FOREACH_END(COL)) {} else \
    for (bool _foreach_continue = true;
\
              _foreach_continue && !BOOST_FOREACH_DONE(COL);
\
              /* noop */)
\
        if (boost::foreach_detail_::set_false(_foreach_continue)) {} else
\
        for (VAR = BOOST_FOREACH_DEREF(COL); !_foreach_continue;
_foreach_continue = true) \
            if (BOOST_FOREACH_NEXT(COL), false) {} else
-------------------

Would you consider adding it to Boost ?

Regards,

Daniel Gehriger

-- 
View this message in context: http://www.nabble.com/BOOST_FOREACH-and-iterating-by-reference-tf3806531.html#a10788909
Sent from the Boost - Users mailing list archive at Nabble.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