
On 02/28/2005 01:56 AM, David Abrahams wrote:
Larry Evans <cppljevans@cox-internet.com> 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.
From my OP, the sentence: tuple_type is not a sequence; I thought would make it obvious that I didn't mean the metafunction, but the result of invokation of that metafunction. OTOH, I really should have said "make the result of a fold metafunction invokation into a sequence". Would that have been sufficient to make my meaning clear?
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.
IIUC, Fusion is in flux, based on the post: http://article.gmane.org/gmane.comp.lib.boost.devel/118011 and mpl has an easy to use reference manual: http://www.boost.org/libs/mpl/doc/refmanual/refmanual_toc.html OTOH, I haven't really looked at fusion, so maybe I should. It's just I've found mpl very good and I've gotten used to it; hence, I'm reluctant to change. I'll take a closer look at fusion and see if I can get it to work, but It's got to do the range_all http://article.gmane.org/gmane.comp.lib.boost.devel/117764 "thing" also, and I had some difficulty getting that to work with mpl; hence, I don't want to go thru that again with fusion, so, no promises. BTW, the range_all.zip has moved in the vault to cppljevans/mpl.