【笔记】C++的函数对象

前言

C++的函数对象学习笔记
重载函数调用操作符的函数被称为函数对象
函数对象在使用重载的()时,因为行为类似函数调用,所以也被成为仿函数

函数对象

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

创建一个函数对象

1
2
3
4
5
6
7
8
class 类名
{
public:
返回值类型 operator()(参数列表)
{
return;
}
};

使用一个函数对象

1
2
类名 函数对象名;
函数对象名(参数列表);

使用匿名函数对象

1
类名 函数对象名(参数列表);

谓词

  • 如果一个函数对象返回值类型为bool,那么这个函数对象被称为谓词
  • 如果谓词的函数列表支持接收一个参数,那么这个谓词就是一元谓词
  • 如果谓词的函数列表支持接收两个参数,那么这个谓词就是二元谓词

创建一个谓词

一元谓词

1
2
3
4
5
6
7
8
class
{
public:
bool operator()(T t)
{
return false;
}
};

一元谓词的应用

二元谓词

1
2
3
4
5
6
7
8
class
{
public:
bool operator()(T t, T t)
{
return false;
}
};

二元谓词的应用

内建函数对象

  • C++中STL提供的函数对象

引入头文件

1
#include <functional>

算数函数对象

取反

1
2
nagate<T> n;
n(t);

加法

1
2
add<T> a;
a(t, t);

减法

1
2
minus<T> m;
m(t, t);

乘法

1
2
multiplies<T> m;
m(t, t);

除法

1
2
divides<T> d;
d(t, t);

取余

1
2
modulus<T> m;
m(t, t);

关系函数对象

  • 返回bool类型数据

等于

1
2
equal_to<T> e;
e(t, t);

不等于

1
2
not_equal_to<T> n;
n(t, t);

大于

1
2
greater<T> g;
g(t, t);

大于等于

1
2
greater_equal<T> g;
g(t, t);

小于

1
2
less<T> l;
l(t, t);

小于等于

1
2
less_equal<T> l;
l(t, t);

逻辑函数对象

逻辑与

1
2
logical_and<T> l;
l(t, t);

逻辑或

1
2
logical_or<T> l;
l(t, t);

逻辑非

1
2
logical_not<T> l;
l(t, t);

完成

参考文献

哔哩哔哩——黑马程序员