是否可以像使用Objective-C块一样使用C ++ lambdas?
例如,使用以下Objective-C代码:
@interface MyClass : NSObject
// ...
- (void)myMethodWithBlockParam:(void(^)(void))block;
//
@end
消息将按如下方式发送:
[myClassInstance myMethodWithBlockParam:^{
// Do something inside block
}];
有没有办法在lambdas的C ++中实现相同的效果?
答案 0 :(得分:6)
在C ++中你可以做到
struct MyClass {
void myMethodWithBlockParam(std::function<void()> block);
};
这将使用lambda作为
调用myClassInstance.myMethodWithBlockParam([]()->void {
// Do something inside block
});
这很容易扩展到带参数和返回类型的函数。使用std :: function的特殊化作为函数参数类型允许传递任何可以使用指定签名调用的函数(函数,函数对象,lambdas)。
Lambdas也可以是闭包,即通过引用或值(作为副本)从其定义上下文绑定变量。