|
Boost : |
From: Aleksey Gurtovoy (agurtovoy_at_[hidden])
Date: 2005-08-09 22:26:29
David Abrahams writes:
> Aleksey Gurtovoy <agurtovoy_at_[hidden]> writes:
>
>> David Abrahams writes:
>>> [Aleksey, I'm not sure why the sort Expression Semantics uses explicit
>>> lambda and apply_wrap2; I don't think it helps to make anything
>>> clearer]
>>
>> Because there is no other way to write that out (auxiliary
>> metafunction aside).
>
> Sorry, I must be dense. Why not just use apply<...> ?
The code in question is this (from
http://www.boost.org/libs/mpl/doc/refmanual/sort.html):
typedef back_inserter< vector<> > aux_in;
typedef lambda<pred>::type p;
typedef begin<s>::type pivot;
typedef partition<
iterator_range< next<pivot>::type, end<s>::type >
, apply_wrap2<p,_1,deref<pivot>::type>
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
, aux_in
, aux_in
>::type partitioned;
If 'pred' is a placeholder expression (e.g. 'is_float<_1>'), replacing
the highlighted line with
, apply<pred,_1,deref<pivot>::type>
would blend together two of them into one, leading to unpredictable
results:
// the above is actually equivalent to this one, which
// is not going to work
, apply< is_float<_1>, _1, deref<pivot>::type >
-- Aleksey Gurtovoy MetaCommunications Engineering
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk