Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2005-02-28 03:56:56

Larry Evans <cppljevans_at_[hidden]> writes:

> After creating:
> typedef range_c<int,0,3> types;
> typedef fold
> < types
> , empty_base
> , inherit< arg<2>, arg<1> >
> >::type tuple_type;
> I'd like to use for_each on tuple_type. For example:
> struct print_integral_c
> {
> template<int i, typename Right>
> void operator()(inherit<integral_c<int,i>, Right>)const
> {
> std::cout<<i<<"\n";
> }
> };
> for_each<tuple_type>(print_integral_c);
> However, tuple_type is not a sequence; hence, for_each won't work.
> I could define the necessary specializations for mpl::begin, etc.,
> to make it a sequence, but I was wondering if there's any way
> or any plans to somehow automagically make fold or reverse_fold
> into a sequence so I could use for_each on it.

No. Since fold and reverse_fold are metafunctions (and therefore
class templates), they can't possibly be sequences (which are always
types). fold and reverse_fold don't even have to _return_ sequences.

I can't understand why you're not using Fusion, or at least trying to
fit into the Fusion framework, but I'm going to stop flogging that
horse now.

Dave Abrahams
Boost Consulting

Boost list run by bdawes at, gregod at, cpdaniel at, john at