c++函数对象/仿函数
仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中重载一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。
c++中对类的()进行重载 数据类型 operator()(变量){}
使用的时候直接person p;p()就可以使用了
因为用起来像函数,所以说叫仿函数
匿名函数对象person()(100,100),用完了就销毁,使用方式是类型名()开头,后面再加实参,这样就不用创建数据,也可以使用类型
class 类名
{
返值类型 operator()(参数类型)
函数体
}
函数对象就是仿函数
概念:
重载函数调用操作符的类,其对象常称为函数对象
函数对象使用重载的()时,行为类似函数调用,也叫仿函数
本质:
函数对象(仿函数)是一个类,不是一个函数
特点:
函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值
函数对象超出普通函数的概念,函数对象可以有自己的状态
函数对象可以作为参数传递
仿函数的语法几乎和我们普通的函数调用一样,不过作为仿函数的类,都必须重载 operator() 运算符。因为调用仿函数,实际上就是通过类对象调用重载后的 operator() 运算符。
如果编程者要将某种“操作”当做算法的参数,一般有两种方法:
(1)一个办法就是先将该“操作”设计为一个函数,再将函数指针当做算法的一个参数;
(2)将该“操作”设计为一个仿函数(就语言层面而言是个 class),再以该仿函数产生一个对象,并以此对象作为算法的一个参数。
而第二种方法更加的清晰,易处理,也方便更改。仿函数的名称是因为他有着函数一样的使用方式,因为仿函数本身是一个类,重载了(),所以可以和函数一样使用,同时仿函数可以方便的作为函数传递,有自己的状态,因为仿函数本质还是一个类,类当然可以作为函数传递,并且有自己的状态。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报