"Neil Hunt" <boost@thehunts.id.au> writes:
I guess the main thrust of the question is "Does the parameters library support runtime enumeration?"
Not directly, but it seems like something we (sh/c)ould support, probably by making ArgumentPacks conforming Fusion sequences so you could use boost/spirit/fusion/algorithm/for_each.hpp to enumerate them. The problem is that I don't have expertise with Fusion-1 and AFAIK it's not fully documented. Specifically, I don't know how to make a conforming Fusion sequence. Maybe Joel can help. Joel?
or should I be looking at MPL?
Wouldn't help you, at least not directly. Well, here's one thing you could do (ALL_CAPS should be reserved for macros, so I'm going with lower_case): // untested BOOST_PARAMETER_KEYWORD(tag, person_window) BOOST_PARAMETER_KEYWORD(tag, address_window) BOOST_PARAMETER_KEYWORD(tag, employer_window) typedef mpl::vector< tag::person_window, tag::address_window, tag::employer_window
all_windows; template <class ArgumentPack, class F> struct process_arg { process_arg(ArgumentPack args, F f) : args(args), f(f) {} template <class Keyword> void operator()(Keyword k) const { f(k, args[k]); } private: ArgumentPack const& args; F const& f; }; template <class Keywords, class ArgumentPack, class F> for_each_arg(ArgumentPack const& args, F const& f) { mpl::for_each<Keywords>( process_arg<ArgumentPack,F>(args,f) ); } Now you can for_each_arg(args, f) where f is some binary function you'd like to be applied to each argument. The first parameter is the keyword (just in case you need it) and the second one is the original argument passed. This won't cope well with missing default arguments, so it seems to me making our ArgumentPacks conforming fusion sequences is really the way to go. -- Dave Abrahams Boost Consulting www.boost-consulting.com