C++中Swift尾随等效函数
问题描述:
在Swift中,当我们需要将闭包作为函数的参数传递时,如果闭包是要传递的最后一个参数,我们可以在调用函数的最后一个括号)
之后指定闭包体这就是所谓的尾随封闭。C++中Swift尾随等效函数
夫特例如:
func someFunctionThatTakesAClosure(closure:() -> Void) {
// function body goes here
}
// Here's how you call this function without using a trailing closure:
someFunctionThatTakesAClosure(closure: {
// closure's body goes here
})
// Here's how you call this function with a trailing closure instead:
someFunctionThatTakesAClosure() {
// trailing closure's body goes here
}
有时在C++中,当我使用std ::排序和我通过闭合,如果我使用了夫特后闭合的等效代码将是更具有可读性。 我对C++标准比C++ 11更新很少,你知道C++中是否有类似的东西吗?
答
这是最简单的C++等价物:
void someFunctionThatTakesAClosure(std::function<void()> closure) {
// function body goes here
}
someFunctionThatTakesAClosure([] {
// code comes here
});
C++不预测像尾随关闭。
注意,在C++中有块(lambda) capturing is not implicit像雨燕或Objective C,你必须要说明什么应该被捕获:
int copyVar = 0;
int refVar = 1;
someFunctionThatTakesAClosure([copyVar, &refVar] {
// code comes here
refVar += copyVar;
});
还有一个野生捕捞,这将使它像雨燕或工作Objective C,但根据我的经验,说明捕获的内容和方式要好得多,在很多情况下,它避免了我创建不需要的参考周期,有时在Objective C中发生了什么(隐含的self
使用)。
注意,在目标C++模块可以作为C++的说法,所以这将工作太:
someFunctionThatTakesAClosure(^{
// mixed C++/Objective C code comes here
});
更先进的方法包括使用C++模板,但我不认为你需要的。
你可以发布你想在'C++'中做一个真实(工作)例子吗? – Galik
不,C++有不同的lambda语法,所以会引入不一致。 – chris