#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
黑色天使 阅读(938)
评论(0) 编辑 收藏 引用 所属分类:
数据结构&算法