Chinaunix首页 | 论坛 | 博客
  • 博客访问: 283594
  • 博文数量: 82
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 874
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-21 09:58
个人简介

traveling in cumputer science!!

文章分类

全部博文(82)

文章存档

2016年(13)

2015年(69)

我的朋友

分类: C/C++

2016-02-29 20:37:39

1.仿函数概念

仿函数(functor),语法上和函数一样,用起来也跟函数一样,但是她是一个如假包换的类。使用时她是一个拥有函数功能的对象。其功能实现就是类中实现一个(),这个类就有了类似函数的行为,就是一个仿函数类了。但是为啥费劲搞这么个四不像唻,当然是他拥有很高的应用市场。她的一个比函数高效的特性就是,仿函数里面的参数可以有记忆功能,为什么能记住呢,因为她是一个对象啊,对象就可以拥有自己的成员变量,然后就记住啦。然而函数要实现这样的功能要麻烦许多,起码要加入一个static类型的变量,或者一个全局的变量当作函数的参数传入,反正就是麻烦加不安全,这样一想仿函数就很有必要知道一下啦!!

2.仿函数实例

一个仿函数,目的是给参数加上一个固定的数然后返回:

点击(此处)折叠或打开

  1. class Add
  2. {
  3.     public:
  4.         Add(int p) { x = p; }
  5.         int operator()(int a) { return a + x; }
  6.     private:
  7.         int x;
  8. }
然后声明一个对象

点击(此处)折叠或打开

  1. Add add1(5);
  2. Add add2(10);
之后就可以

点击(此处)折叠或打开

  1. int x = add1(2);
  2. int y = add2(2);
  3. cout<<"x result: "<<x<<endl;
  4. cout<<"y result: "<<y<<endl;
输出结果:
x result: 7
y result: 12

如上所述,add1是基于值为5的成员变量的加法
                    add2是基于值为10的成员变量的加法
还有就是这一思想可以应用到STL的迭代中大展身手!!

3.参考链接:

http://blog.csdn.net/tianshuai1111/article/details/7687983
http://my.oschina.net/llehs/blog/180594



阅读(1845) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

OowarrioroO2016-03-16 22:34:06

也就是在类中重载  () 运算符