$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Joel de Guzman (joel_at_[hidden])
Date: 2008-01-13 08:36:57
Tobias Schwinger wrote:
>>> (c0,c1,...,cN) being just another 'Case' rather than a 'Sequence'.
>> o..k... Hmm.. so how would the resulting case object for this
>> expression look like:
>>
>>      case_c<1>(f1), case_c<2>(f2)
>>
>> ?
> 
>      template< class SeqCases >
>      struct sequenced_case
>      {
>          SeqCases seq_cases;
> 
>          typedef SeqCases seq_cases_t;
> 
>          sequenced_case(SeqCases const& s)
>             : seq_cases(s)
>          { }
> 
>          typedef mpl::transform_view< SeqCases,
>              fusion::result_of::first<_> > labels;
> 
>          template< typename Result, class I >
>          Result apply(I const&)
>          {
>              return fusion::at<I>(this->seq_cases);
>          }
>      };
> 
> If case_c<1>(f1) has the type C1 and case_c<2>(f2) has the type C2 the 
> comma operator's result type is
> 
>      sequenced_case< joint_view<C1::seq_cases_t,C2:::seq_cases_t> >
> 
> 'seq_cases_t' would not have to be part of the Concept, because 
> 'switch_' doesn't care about it.
Sounds good to me! I like it. So, this involves the variation where
a case has an MPL sequence of labels. I knew there's something in
that that I like. Intuition, I guess. That is also why I use the
name case_ regardless of number. A compound case is just another
case anyway. Does not matter how many labels it serves.
Not sure how, implementation-wise, this works for Steven. Steven?
If this pans out, I'll refine the concept one more time.
Regards,
-- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net