C++使用lambda表达式 回调函数 详解 举例
时间: 2024-11-20 15:33:33 浏览: 61
C++ lambda表达式允许您创建简单的、无需命名的回调函数,它们可以在需要的地方直接定义和使用,尤其适合于需要一次性使用的简单功能。这里是一个详细的介绍和示例:
**Lambda表达式的结构**:
Lambda由三部分组成:捕获列表(可选)、箭头操作符(->),以及函数体。基本形式如下:
```cpp
[capture-list] (parameters) -> return-type { function-body }
```
其中:
- `capture-list`(捕获列表)指定外部变量如何被lambda访问,如按值(auto)、按引用(&)或不捕获【无此部分则默认无捕获】。
- `(parameters)` 是参数列表。
- `-> return-type` 指定返回类型,如果省略则隐式为`void`。
- `{ function-body }` 是函数体,执行的具体操作。
**回调函数示例**:
假设我们有一个`MyClass`类,它有一个成员函数`MemberFunction`,我们可以创建一个lambda来作为这个函数的回调:
```cpp
#include <iostream>
class MyClass {
public:
void MemberFunction(int x) {
std::cout << "MemberFunction called with x = " << x << '\n';
}
};
int main() {
MyClass myObject;
// 使用lambda作为回调,捕获myObject的引用
auto boundFunction = [this](int x) {
MemberFunction(x);
};
// 当需要时调用lambda,传入参数
boundFunction(10); // 输出: MemberFunction called with x = 10
return 0;
}
```
在这个例子中,`[this](int x)`表示捕获`this`指针,这样lambda就可以访问类的成员函数。当我们在`boundFunction(10)`中调用时,实际上是调用了`myObject.MemberFunction(10)`。
阅读全文