#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生成一個仿函數(shù)類,這個類構(gòu)造時賦值了arg
//遇到(person)時,調(diào)用這個仿函數(shù)類重載的()操作即
//t.*pfn(arg)
//又回歸為一個函數(shù),不過參數(shù)可以自己控制了,娃哈哈
simple_bind(&Person::SetName, string("Martin"))(person);
cout << person.Name() << endl;
}
posted on 2011-03-22 23:46
黑色天使 閱讀(963)
評論(0) 編輯 收藏 引用 所屬分類:
數(shù)據(jù)結(jié)構(gòu)&算法