前言
C++的函数对象学习笔记
重载函数调用操作符的函数被称为函数对象
函数对象在使用重载的()
时,因为行为类似函数调用,所以也被成为仿函数
函数对象
- 函数对象在使用时,可以像普通函数一样调用,可以有参数列表,可以有返回值
- 函数对象超出普通函数的概念,函数对象可以有自己的状态
- 函数对象可以作为参数传递
创建一个函数对象
1 2 3 4 5 6 7 8
| class 类名 { public: 返回值类型 operator()(参数列表) { return; } };
|
使用一个函数对象
使用匿名函数对象
谓词
- 如果一个函数对象返回值类型为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; } };
|
二元谓词的应用
内建函数对象
引入头文件
算数函数对象
取反
加法
减法
乘法
1 2
| multiplies<T> m; m(t, t);
|
除法
取余
关系函数对象
等于
不等于
1 2
| not_equal_to<T> n; n(t, t);
|
大于
大于等于
1 2
| greater_equal<T> g; g(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);
|
完成
参考文献
哔哩哔哩——黑马程序员