
AMDG Joel de Guzman <joel <at> boost-consulting.com> writes:
I'm interested. I'll need polymorphic return type handling though. Something like:
struct f { template <typename Case> struct result;
template <> struct result<mpl::int_<0> > : mpl::identity<char> {};
template <> struct result<mpl::int_<2> > : mpl::identity<float> {};
template <> struct result<mpl::int_<5> > : mpl::identity<std::string> {};
char operator()(mpl::int_<0>) const; float operator()(mpl::int_<1>) const; std::string operator()(mpl::int_<5>) const; };
Regards,
So what goes here? template<class Cases, class Int, class F> ??? switch_(Int i, F f); ??? could be either any or variant. If any, why then, typedef boost::any result_type works just fine. Variant is a little more difficult especially if operator() is a template. template<class F> struct get_result { template<class Case> struct apply { typedef typename F::template result<Case>::type type; }; }; template<class F, class Sequence> struct variant_adapter : F { typedef typename mpl::transform<Sequence, mpl::protect<get_result<F> >, mpl::inserter<mpl::set0<>, mpl::insert<_1, _2> > >::type possible_results; typedef typename make_variant_over<possible_results>::type result_type; variant_adapter(const F& f) : F(f) {} }; In Christ, Steven Watanabe