C++笔记之函数对象functors与可调用对象
code review!
文章目录
- C++笔记之函数对象functors与可调用对象
- 0.函数对象(Function Objects),也称为functors
- 1.函数对象与可调用对象的关系
- 2.可调用对象几种形式
- 2.1. 使用函数对象
- 2.2. 使用普通函数指针
- 2.3. 使用Lambda表达式
- 2.4. 使用`std::function`
- 2.5. 使用`std::bind`
- 3.std::function和functor的关系
- 4.C++中的仿函数和函数对象的关系——完全一样
- 5.函数对象的其他介绍
- 6.为什么函数对象可以做到状态在对象生命周期内保持持久化,原理是什么?
相关笔记
C++新特性探究(十四):function
C++笔记之使用STL的function实现回调机制
C++新特性探究(九):functor仿函数
C++新特性探究(9.1):functor仿函数探究
0.函数对象(Function Objects),也称为functors
1.函数对象与可调用对象的关系
2.可调用对象几种形式
2.1. 使用函数对象
代码
#include <iostream>
class Adder {
public:
int operator()(int a, int b) const {
return a + b;
}
};
int main() {
Adder adder;
std::cout << adder(2, 3) << std::endl; // Output: 5
return 0;
}
2.2. 使用普通函数指针
代码
#include <iostream>
int add(int a, int b) {
return a + b;
}
int main() {
int (*funcPtr)(int, int) = add;
std::cout << funcPtr(2, 3) << std::endl; // Output: 5
return 0;
}
2.3. 使用Lambda表达式
代码
#include <iostream>
int main() {
auto lambda = [](int a, int b) { return a + b; };
std::cout << lambda(2, 3) << std::endl; // Output: 5
return 0;
}
2.4. 使用std::function
代码
#include <iostream>
#include <functional>
int add(int a, int b) {
return a + b;
}
int main() {
std::function<int(int, int)> func = add;
std::cout << func(2, 3) << std::endl; // Output: 5
return 0;
}
2.5. 使用std::bind
代码
#include <iostream>
#include <functional>
int add(int a, int b) {
return a + b;
}
int main() {
auto func = std::bind(add, std::placeholders::_1, std::placeholders::_2);
std::cout << func(2, 3) << std::endl; // Output: 5
return 0;
}
**
总结来说,函数对象是一种实现可调用对象的方式,通过重载operator()
运算符可以使对象像函数一样被调用,但不是所有的可调用对象都需要重载operator()
。不同的可调用对象形式可以根据实际需要选择使用**。
3.std::function和functor的关系
4.C++中的仿函数和函数对象的关系——完全一样
5.函数对象的其他介绍