目标 c - 用 C++ lambda 模仿 Obj-C 块行为

objective c - Imitating Obj-C block behaviour with C++ lambdas

本文关键字:Obj-C 模仿 lambda C++ 目标      更新时间:2023-10-16

是否可以像使用 Objective-C 块一样使用 C++ lambda?

以下面的Objective-C代码为例:

@interface MyClass : NSObject
// ...
- (void)myMethodWithBlockParam:(void(^)(void))block;
//
@end

消息将按如下方式发送:

[myClassInstance myMethodWithBlockParam:^{
     // Do something inside block
}];

有没有办法在使用 lambda C++中达到相同的效果?

在C++你可以做

struct MyClass {
  void myMethodWithBlockParam(std::function<void()> block);
};

这将用 lambda 调用为

myClassInstance.myMethodWithBlockParam([]()->void {
   // Do something inside block
});

这很容易扩展到具有参数和返回类型的函数。使用 std::function 的专用化作为函数参数类型允许传递任何可调用的指定签名(函数、函数对象、lambda)。

Lambda 也可以是闭包,即通过引用或值(作为副本)从其定义上下文中绑定变量。