mem_fun和bind2nd的用法例子

来源:互联网 发布:淘宝返利赚钱吗 编辑:程序博客网 时间:2024/05/17 09:15
#include<iostream>#include<algorithm>#include<vector>using namespace std;class Widget:public unary_function<int,void>{    int id;   public:        Widget(int x):id(x){}        void Multiply(int x) const        {            cout<<"id:"<<id<<" "<<id*x<<endl;        }        void Output() const        {            cout<<"id:"<<id<<endl;        }};class Operation:public binary_function<Widget*,int,void>{    public:        void operator()(Widget *wid,int x) const        {            wid->Multiply(x);        }};int main(){    vector<Widget*> vecs;    vecs.push_back(new Widget(1));    vecs.push_back(new Widget(2));    vecs.push_back(new Widget(3));    vecs.push_back(new Widget(4));    vecs.push_back(new Widget(5));    //for_each(vecs.begin(),vecs.end(),mem_fun_ref(&Widget::Multiply));    //for_each(vecs.begin(),vecs.end(),bind2nd(Operation(),4));    //for_each(vecs.begin(),vecs.end(),bind2nd(mem_fun(&Widget::Multiply),4));    const_mem_fun1_t<void,Widget,int> fun=mem_fun(&Widget::Multiply);    fun(vecs[1],5);    const_mem_fun_t<void,Widget> fun2=mem_fun(&Widget::Output);    fun2(vecs[2]);}