1 嵌套lambda表达式
写一个lambda表达式A,其入参是一个lambda表达式B:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include <cstdio>
#include <iostream>
namespace example01 {
template<typename Func>
void run_task(Func &&func) {
int arg = 100;
printf("1. arg >> %d\n", arg);
/**
* 定义一个别名,进行引用捕获
* (注意:引用捕获时,请考虑被捕获对象的生命周期)
*/
func([&i = arg]() mutable {
++i;
printf("3. i == %d\n", i);
throw std::logic_error("逻辑错误");
});
printf("6. arg << %d\n", arg);
}
inline void run() {
//写一个lambda表达式A,其入参是一个lambda表达式B
example01::run_task([](auto get_ex) {
printf("2. start check\n");
try {
get_ex();
} catch (std::exception &ex) {
std::cout << "4. accept failed: " << ex.what() << "\n";
}
printf("5. end check\n");
});
}
} //namespace example
int main() {
example01::run();
return 0;
}
|
输出结果如下:
- arg » 100
- start check
- i == 101
- accept failed: 逻辑错误
- end check
- arg « 101
当嵌套使用lambda表达式时,代码比较难读,代码书写的顺序和执行顺序差异很大!