C++ std::function、函数对象和lambda表达式
std::function是C++11的新特性,包含在头文件
std::function类型对象可以包装函数指针、函数对象和lambda表达式
- 包装函数指针:
1 | cppCopy code |
- 包装函数对象:
1 | cppCopy code |
- 包装lambda表达式:
1 | cppCopy code |
std::function和std::bind一起使用
使用std::bind可以将可调用对象和参数一起绑定,绑定后的结果使用std::function进行保存,并延迟调用到任何我们需要的时候。
1 |
|
函数对象
C++中的函数对象(functors)是可以像函数一样被调用的对象,通常是类重载了函数调用操作符operator()
1 | #include <iostream> |
lambad表达式
Lambda表达式是一种函数对象
1 | cppCopy code |
- capture clause
:捕获列表,用于指定Lambda表达式中可以使用的外部变量。可以是值传递、引用传递或隐式捕获。
- parameters
:参数列表,与普通函数的参数列表类似。
- return_type
:返回类型,与普通函数的返回类型类似。
- {}
:函数体,包含Lambda表达式的具体实现。
1 |
|
this捕获成员变量
1 |
|
ArkUI使用std::function举例
1 | auto onAppear = [vm, func = panda::CopyableGlobal(vm, func), node = AceType::WeakClaim(frameNode), containerId]() { |