蜗牛的家
男儿当自强
posts - 48,  comments - 21,  trackbacks - 0
#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 黑色天使 阅读(883) 评论(0)  编辑 收藏 引用 所属分类: 数据结构&算法

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2011年3月>
272812345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(2)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜