如何创建与Objective-C完成块等效的C ++作为参数

问题描述

我们的iOS应用依赖于c ++库。我是c ++的新手,我正在寻找与此等效的c ++:

定义:

- (void)mySetter:(Thing)thing completion:(void (^)(BOOL))completion;

使用:

[self mySetter:thing completion:^(BOOL success) {
    // do something if successful
}]

我知道这是一个愚蠢的问题,可能已经回答了,但是我遇到的所有答案对于c ++菜鸟还是很困惑。

很高兴删除,但更愿意给出投票和复选标记:)

解决方法

在C ++中,您通常为此使用std::function,这是一个类模板,可以容纳任何类型的可调用函数/对象,包括lambda(注意:只要可复制):

@Component
public class RequestReplyRouter extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        from("direct:request-reply").
        to("jms:RequestQueue?ReplyTo=ResponseQueue&exchangePattern=InOut")
        .log("Request-reply Body is  ${body}   and header info is   ${headers}  ");

        from("jms:ResponseQueue")
        .log("Received Body is  ${body}   and header info is   ${headers}  ")
        .to("direct:receive"); // sending data to the endpoint
    }

}

请注意,在Objective-C ++ (。mm文件)中,您通常可以自由地混合使用C ++和Obj-C类型,因此您可以例如将一个块作为参数传递给C ++函数-您只需注意正确的block pointer syntax

void mySetter(Thing thing,std::function<void(bool)> completion) {
  // ...
  completion(true);
}

mySetter(thing,[](bool success) {
  // ...
});

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...