4

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

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

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

该消息将按如下方式发送:

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

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

4

1 回答 1

6

在 C++ 中你可以做

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

这将使用 lambda 调用

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

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

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

于 2013-01-30T00:23:09.860 回答