欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C++里的仿函数、函数对象和函数指针的使用教程

最编程 2024-01-12 18:24:09
...

研究这个起因是这样的,就是今天在用priority_queue的时候,需要自定义比较函数,但是此时又不能修改需要比较的类的内容(即不能用重载<的方法),所以只能写在外面,但是发现这样并不能编译通过。报的错叫cmp(我写的那个比较函数)不是类型名。后来查了下资料发现,这个需要用比较类去完成,比较类需要重载()方法,所以这个事情就非常引起我的好奇,想要知道一下,为什么sort这样的函数就可以直接用函数名,而priority_queue就不行呢


基本概念

首先先要了解几个概念:函数对象/仿函数,函数指针,Lambda表达式

函数对象/仿函数

函数对象(function object)又叫仿函数(functor),就是重载了调用运算符()的类,所生成的对象,就叫做函数对象/仿函数。因为重载了()之后,我们就能像函数一样去使用这个类,同时类里面又可以储存一些信息,所以要比普通的函数更加灵活。
就像,下面的就是一个比较类:

class comp_class {
public:
    bool operator()(const B& a,con

推荐阅读