用C ++ lambdas模仿Obj-C块行为

时间:2013-01-30 00:04:30

标签: c++ objective-c c++11 lambda block

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

例如,使用以下Objective-C代码:

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

消息将按如下方式发送:

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

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

1 个答案:

答案 0 :(得分:6)

在C ++中你可以做到

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

这将使用lambda作为

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

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

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