c++函数对象/仿函数

仿函数(functor)就是使一个类的使用看上去象一个函数其实现就是类中重载一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。

c++中对类的()进行重载 数据类型 operator()(变量){}

使用的时候直接person p;p()就可以使用了

因为用起来像函数,所以说叫仿函数

匿名函数对象person()(100,100),用完了就销毁,使用方式是类型名()开头,后面再加实参,这样就不用创建数据,也可以使用类型

class 类名
{
  返值类型 operator()(参数类型)
  函数体
}

 

函数对象就是仿函数

概念:
重载函数调用操作符的类,其对象常称为函数对象
函数对象使用重载的()时,行为类似函数调用,也叫仿函数
本质:
函数对象(仿函数)是一个,不是一个函数

特点:
函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值
函数对象超出普通函数的概念,函数对象可以有自己的状态
函数对象可以作为参数传递

仿函数的语法几乎和我们普通的函数调用一样,不过作为仿函数的类,都必须重载 operator() 运算符。因为调用仿函数,实际上就是通过类对象调用重载后的 operator() 运算符。

如果编程者要将某种“操作”当做算法的参数,一般有两种方法:
(1)一个办法就是先将该“操作”设计为一个函数,再将函数指针当做算法的一个参数;
(2)将该“操作”设计为一个仿函数(就语言层面而言是个 class),再以该仿函数产生一个对象,并以此对象作为算法的一个参数。

而第二种方法更加的清晰,易处理,也方便更改。仿函数的名称是因为他有着函数一样的使用方式,因为仿函数本身是一个类,重载了(),所以可以和函数一样使用,同时仿函数可以方便的作为函数传递,有自己的状态,因为仿函数本质还是一个类,类当然可以作为函数传递,并且有自己的状态。

 

posted @   纸包鱼  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示