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++中是否有类似的东西吗?

+0

你可以发布你想在'C++'中做一个真实(工作)例子吗? – Galik

+0

不,C++有不同的lambda语法,所以会引入不一致。 – chris

这是最简单的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++模板,但我不认为你需要的。