$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Andy Little (andy_at_[hidden])
Date: 2005-05-02 04:33:50
"Eric Niebler" <eric_at_[hidden]> wrote
> I suppose you could say that case 2 can always be handled with a set of
> parens, as in:
>
> BOOST_FOREACH( int i, (some_trait<this,that>::some_list()) )
>
> Therefore, all macro args but the last should be interpreted as part of the
> loop variable declaration.
I have used the BOOST_FOREACH macro and its ok. As its main raison d'aitre is
brevity, why do I need to explicitly provide the loop variable.I would hope for
something like:
FOREACH(my_container){ std::cout << *_ << '\n'; }
IOW the boost::lambda placeholders could be used. Is not foreach a subset of
the lambda functionality. (Proponents of lambda always cite this is an example.)
I dont know of a reason to require conversions as in the example:
short array_short[] = {1,2,3};
BOOST_FOREACH( int i, array_short )
{
// The short was implicitly converted to an int
}
What is the point of the example?
FWIW A naive method to do the above is as:
#define FOR_EACH(cont) \
for (BOOST_TYPEOF( cont )>::iterator _ = cont ## .begin();\
_ != cont ## .end();\
++ _ )
exept require *_ as opposed to _
However maybe this is an advantage... because the iterator is exposed then more
loop information is avaialable eg if _ == my_container::begin() etc., which is
an advantage over simply having the element available so making things more
versatile.
regards
Andy Little