回调函数地表达式及各部分解释
时间: 2024-10-12 13:12:00 浏览: 21
在C++中,回调函数、仿函数和lambda表达式都是实现函数委托的方式,允许我们在不改变原有代码结构的情况下,动态地指定执行某个操作的具体函数。
**回调函数**[^1]通常是指将一个函数的指针作为参数传递给另一个函数,当那个函数需要执行该操作时,就调用这个回调函数。例如:
```cpp
void parentFunction(void (*callback)(int)) {
int arg = 10;
callback(arg); // 这里是回调,parentFunction内部调用了传入的函数
}
void myCallback(int x) {
std::cout << "Argument: " << x << std::endl;
}
int main() {
parentFunction(myCallback); // 委托myCallback到parentFunction
return 0;
}
```
**仿函数**(Functors)是具有成员函数的对象实例,它们可以替代标准库中的函数指针。虽然不是严格意义上的回调,但它们可以用于相似的目的:
```cpp
class Functor {
public:
void operator()(int x) { std::cout << "Argument: " << x << std::endl; }
};
int main() {
Functor f;
parentFunction(f);
return 0;
}
```
**Lambda表达式**是C++11引入的新特性,它是一种简洁的匿名函数形式,可以直接在需要的地方创建并立即使用。它更现代且直观,可以轻松替换回调和仿函数:
```cpp
auto myLambda = [](int x) -> void {
std::cout << "Argument: " << x << std::endl;
};
parentFunction(myLambda);
```
这里`[]`表示捕获列表,`()`是函数体,`-> void`是返回类型。
阅读全文