
Steven Watanabe wrote:
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.
Yeah, right. That's too hairy. I guess it's best to have that (variant returns) as the responsibility of the function object: struct f { typedef variant<char, float, std::string> result_type; char operator()(mpl::int_<0>) const; float operator()(mpl::int_<1>) const; std::string operator()(mpl::int_<5>) const; }; Regards, -- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net