|
Boost : |
From: Larry Evans (cppljevans_at_[hidden])
Date: 2007-04-19 04:54:28
On 04/18/2007 01:06 PM, Eric Niebler wrote:
> Larry Evans wrote:
[snip]
>>I've just encounted a need for something like this. For example,
>>if you have a list of types for which you want to apply the or_ to,
>>however, that list must by calculated, then the only way to apply
>>or to it is with a fold operation. Since mpl::fold takes
>>an argument represening the initial state, this would naturally
>>be proto::or_<> in case you want to proto::or_ together a list
>>of types.
>
> <snip>
>
> Interesting. In order for this to work, proto::or_ would need to be an
> extensible mpl sequence, right?
[snip]
No. The input to fold has to be; however, the output produced doesn't.
Here's what I've got so far:
struct
or_base
;
template
< class Head
, class Tail
>
struct
or_op
{
typedef
proto::or_
< Head
, typename Tail::type
>
type
;
};
template
< class Head
>
struct
or_op
< Head
, or_base
>
{
typedef
Head
type
;
};
typedef
mpl::vector
< inp<inp_0>::type
, inp<inp_1>::type
, out<out_0>::type
, out<out_1>::type
, out<out_2>::type
>
grm_syms
;
struct
grm_symbol
: mpl::fold
< grm_syms
, or_base
, or_op
< mpl::arg<2>
, mpl::arg<1>
>
>::type
{
};
And it appears to work.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk