Taking the following example, I wonder whether there is an alternative to boost::mpl::for_each
, which does call a Functor without any arguments.
#include <boost/mpl/vector.hpp>
#include <boost/mpl/for_each.hpp>
struct EasyFixEngineA { static const char* const name() { return "a"; } };
struct EasyFixEngineB { static const char* const name() { return "b"; } };
struct Registrator {
// Would prefer a template<class T> void operator()()
template<class T> void operator()(T t) {
RegisterInFactory<EasyFixEngine, T> dummy(T::name());
}
};
// ...
typedef boost::mpl::vector<EasyFixEngineA,EasyFixEngineB> Engines;
boost::mpl::for_each<Engines>(Registrator());
It seems like for_each
is default-instantiating the types.
Use boost::type
and mpl::_
to create an MPL lambda that transforms each type in the list before instantiating the elements and calling the function, like this:
mpl::for_each<Engines, boost::type<mpl::_> >(Registrator());
Registrator
should look something like this:
struct Registrator
{
template<typename T>
void operator()(boost::type<T>) const
{
RegisterInFactory<EasyFixEngine, T> dummy(T::name());
}
};
Hope that helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With