void test(Widget& w);
vector<Widget>vw;
for_each(vw.begin(), vw.end(), test);
I. mem_fun_ref
class Widget {
public:
...
void test();
...
};
vector<Widget>vw;
for_each(vw.begin(), vw.end(), mem_fun_ref(&Widget::test));
II. mem_fun
// source code
template<typename R, typename C>
class mem_fun_t:public unary_funciton<C*, R>
{
R (C::*pmf)();
public:
explicit mem_fun_t(R (C::*p)()) : pmf(p) {}
R operator() (C* p)const {
return (p->*pmf)();
}
};
template<typename R, typename C>
mem_fun_t<R, C>
mem_fun(R(C::*pmf)()) {
return mem_fun_t<R, C>(pmf);
}
class Widget {
public:
...
void test();
...
};
list<Widget*>lpw;
for_each(lpw.begin(), lpw.end(), mem_fun(&Widget::test));