|
Boost : |
From: Joel de Guzman (joel_at_[hidden])
Date: 2005-10-12 20:49:43
Eric Niebler wrote:
> Joel de Guzman wrote:
>
>>Docs: http://tinyurl.com/77pz5
>>
>
>
> In "Block Statement", (http://tinyurl.com/b25hr) you show how to use the
> comma operator to sequence statements. I see problems here, especially
> when calling a function that takes a predicate that isn't the last
> argument. For instance, how would you use Phoenix to create a
> filter_iterator?
>
> iterator begin, end;
> ...
> boost::make_filter_iterator(arg1 > 5, begin, end);
> // Oops! ---------------------------^
>
> Isn't that comma going to be Phoenix's overloaded comma?
No. If you want the comma operator to fire, you have to place them
inside parentheses:
boost::make_filter_iterator((arg1 > 5, blah1, blah2), begin, end);
I remember a very early version of Phoenix named SE (short for
semantic expressions) and Spirit where I used the () operator
instead of the [] operator. For compound expressions, I had
to use the double parens. Example:
if_(c)
((
do_this,
then_than,
finaly_that
))
Otherwise, C++ will complain.
Regards,
-- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk