- C++(3)
- functor 仿函数
- Lambda
- 写法: Lambda:[]{}
- 写法 Lambda:{}
- 写法 Lambda:->{}
- 闭包[]与 mutable
- []捕获规则
- for each
- sort()/list::sort
- QT 中 signal 和 slot 机制
- lambda 与 仿函数
C++(3)
functor 仿函数
重载了 operator()的类的对象,在使用中,语法类型于函数。故称其为仿函数。
此种用法优于常见的函数回调。
相对于函数,仿函数,可以拥用初始状态,一般通过 class 定义私有成员,并在声
明对象的时候,进行初始化。
# if 1
//todo 仿函数
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Compare {
public:
Compare(bool flag=false):flag(flag) {}
int operator()(int a, int b) {
if (flag) {
return a < b;
} else {
return a > b;
}
}
protected:
bool flag;
};
int main() {
vector<int> v = { 12, 332, 35, 9, 5 };
sort(v.begin(), v.end(), Compare(true));
for (auto i : v) {
cout << i << " ";
}
return 0;
}
# endif
Lambda
简短函数,就地书写,调用,即 Lambda 存在的意义,常用于取代作回调用的简
短函数指针与仿函数。
就地书写,因只有函数体,即无函数名,也称匿名函数。
格式:
[capturelist] (parameterlist) mutable ->return type { function body }
[捕获列表](参数列表) -> 返回类型 { 函数体 }
capturelist
捕获列表。捕获列表,