#include "stdafx.h"
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Person
{
    Person(const string& name)
        : name_(name)
    {}
    string Name()
    {
        return name_;
    }
    void SetName(string name)
    {
        name_ = name;
    }
    string name_;
};
template <typename R, typename T, typename Arg>
class simple_binder
{
public:
    explicit simple_binder(R (T::*pfn)(Arg), const Arg& arg)
        : pfn_(pfn)
        , arg_(arg)
    {}
    R operator()(T& t)
    {
        return (t.*pfn_)(arg_);
    }
private:
    R (T::*pfn_)(Arg);
    Arg arg_;
};
template <typename R, typename T, typename Arg>
simple_binder<R, T, Arg>
simple_bind( R (T::*pfn)(Arg), const Arg& arg)
{
    return simple_binder<R, T, Arg>(pfn, arg);
}
int main()
{
    Person person("Ralph");
    //smimple_bind生成一个仿函数类,这个类构造时赋值了arg
    //遇到(person)时,调用这个仿函数类重载的()操作即
    //t.*pfn(arg)
    //又回归为一个函数,不过参数可以自己控制了,娃哈哈
    simple_bind(&Person::SetName, string("Martin"))(person);
    cout << person.Name() << endl;
}
	posted on 2011-03-22 23:46 
黑色天使 阅读(984) 
评论(0)  编辑 收藏 引用  所属分类: 
数据结构&算法