1. 函数指针(Function Pointer):
void foo(int x) {
// do something
}
// 定义函数指针类型
typedef void (*FuncPtr)(int);
// 创建函数指针对象并进行调用
FuncPtr ptr = foo;
ptr(10);
2. 函数对象(Function Object):
struct Functor {
void operator()(int x) {
// do something
}
};
Functor functor;
functor(10);
3. Lambda 表达式:
auto lambda = [](int x) {
// do something
};
lambda(10);
4. std::function:
#include <functional>
void foo(int x) {
// do something
}
std::function<void(int)> func = foo;
func(10);
5. 成员函数指针(Member Function Pointer):
class MyClass {
public:
void memberFunc(int x) {
// do something
}
};
typedef void (MyClass::*MemFuncPtr)(int);
MyClass obj;
MemFuncPtr memFuncPtr = &MyClass::memberFunc;
(obj.*memFuncPtr)(10);
6. std::bind:
#include <functional>
void func(int a, int b, int c) {
// do something
}
auto boundFunc = std::bind(func, 10, std::placeholders::_1, 20);
boundFunc(30); // 等价于 func(10, 30, 20)
定义函数指针:
- 使用typedef关键字:
typedef void (*FuncPtr)(int);
2.使用类型别名(Type Alias):
using FuncPtr = void (*)(int);