
Tobias Schwinger <tschwinger <at> isonews2.com> writes:
Hi Steven,
Steven Watanabe wrote:
AMDG
Is there any interest in a function template that generates a switch statement?
Yes. I'm interested.
struct f { typedef void result_type; void operator()(mpl::int_<0>) const { std::cout << "2" << std::endl; } void operator()(mpl::int_<1>) const { std::cout << "1" << std::endl; } void operator()(mpl::int_<5>) const { std::cout << "0" << std::endl; } };
int main() { typedef mpl::vector<mpl::int_<0>, mpl::int_<1>, mpl::int_<5> > cases; switch<cases>(5, f()); //prints 0 try { switch<cases>(3, f()); } catch(bad_switch&) {} }
Is this an interface proposal or just some code to illustrate the idea?
Yes this was how the interface would look. I also have a three parameter version to handle default
I'd like to have templatized parameters and probably separate function objects for the cases rather than shape-shifting overloads...
I did it this way to allow usage like template<class FusionSequence> struct print_nth { template<class Index> void operator()(Index) const { std::cout << fusion::at<Index>(sequence) << std::endl; } print_nth(const FusionSequence& s) : sequence(s) {} const FusionSequence& sequence; };
Regards, Tobias