
Markus Werle <yg-boost-users@m.gmane.org> writes:
Hi!
I am trying to migrate some parts of my code from loki to boost::mpl.
Q1: which is the best way to perform nested if-then-else?
Assume given "values": bool B1, bool B2; class ff, class tf, class ft, class tt;
I replaced
----------------------------------------------------------- typedef typename Loki::Select<B1, typename Loki::Select<B2, tt, tf>::Result, typename Loki::Select<B2, ft, ff>::Result >::Result type; -----------------------------------------------------------
with
typedef typename apply_if < bool_c<B1>,
apply_if < bool_c<B2>, identity<tt>, identity<tf>
,
apply_if < bool_c<B2>, identity<ft>, identity<ff>
::type type;
typedef typename mpl::apply_if_c< B1 , mpl::if_c<B2, tt, tf> , mpl::if_c<B2, ft, ff> >::type is the most economical form, given what you have to work with.
Q2: Is apply_if always to be preferred over if_?
No apply_if<C, identity<X>, identity<Y> > is a lot less clear and less-efficient than simply: if_<C, X, Y>
Q3: (OT) Is there a mpl-equivalent to run-time case?
:-) Aleksey and I have been discussing some shorthands for if (c1) then t1 else if (c2) then t2 else if (c3) then t3 ... else if (c4) then t4 but that's not quite the same as a case statement. -- Dave Abrahams Boost Consulting www.boost-consulting.com