Manfred Doudar wrote:
Hi,
I need to be explicit about a function call, but unsure quite how to make it work, cut down example follows:
struct M { static void foo() { ... } };
struct R { static void foo() { ... } };
struct Func { typedef void result_type;
template <typename T, typename U> result_type operator()(U& u) const { T::foo(); // call on either M or R
// do something with 'u' } };
int main(int argc, char** argv) { using namespace boost::mpl;
typedef vector<M, R> vec;
Func f; Object instance; for_each<vec>(boost::bind(&Func::operator()<XXX, Object>, boost::ref(f), instance) );
return 0; }
Question is, what goes in at XXX above?
I was thinking something along the lines of:
boost::mpl::bind<boost::mpl::_1>
..but well, that doesn't work.
Try passing an argument of type M or R as a parameter: template<typename T, typename U> void operator()(const T&, U& u) const { T::foo(); } ... for_each<vec>(boost::bind(boost::ref(f), _1, instance)) In Christ, Steven Watanabe