Boost logo

Boost Users :

Subject: Re: [Boost-users] [MPL] - for_each operators with decision branching
From: strasser_at_[hidden]
Date: 2010-05-19 14:39:13


Zitat von Noah Roberts <roberts.noah_at_[hidden]>:

> struct operator
> {
> template < typename MetaField >
> void operator()(MetaField const&, boost::enable_if< some_test >::type
> * = 0);
> template < typename MetaField >
> void operator()(MetaField const&, boost::disable_if<some_test>::type *
> = 0);
> };

the point of code like this usually is to only instantiate the branch
that is chosen, otherwise you could just use
if(some_test::value)...else...

that means that the two branches must be in different functions, so I
don't see a way to make this any easier, or how a library like MPL
could.

you can however avoid the use of enable_if, if you prefer:
void operator()(T t){
   this->operator()(t,typename some_test<...>::type());
}
void opeartor()(T t,mpl::true_ test_is_true){
   ...
}
void opeartor()(T t,mpl::false_){
   ...
}

this also makes writing 3 or more branches (if...elseif...else) easier
because you can use more than one condition parameter for overloading.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net