這個問題在這里已經有了答案: 什么是 C 11 中的 lambda 運算式? (10 個回答) 6 天前關閉。
此貼4天前編輯提交審核,未能重新開貼:
原始關閉原因未解決
我正在閱讀一個開源專案。我無法理解這個片段的作用?
EXPORT Result LoaderParse(LoaderContext *Cxt, Context **Module, const char *Path) {
return wrap([&]() {
return fromloa(Cxt)->parse(std::filesystem::absolute(Path));
}, [&](auto &&Res) {
*Mod = toAST((*Res).release());
}, Cxt, Module);
}
template <typename T, typename U, typename... CxtT>
inline Result wrap(T &&Proc, U &&Then, CxtT *...Cxts) noexcept {
if (isC(Cxts...)) {
if (auto Res = Proc()) {
Then(Res);
return 0;
} else {
return 1;
}
} else {
return 2;
}
}
誰能解釋我[&]在這種情況下會做什么?
uj5u.com熱心網友回復:
[&]with[=] 表示capture-default給定 lambda 的策略:
&(通過參考隱式捕獲使用的自動變數)和=(通過復制隱式捕獲使用的自動變數)。
對于您的特定情況,這意味著傳遞給wrap函式的兩個第一個閉包(引數)可以通過參考訪問給定背景關系(和)中的Cxt所有Module變數Path。捕獲串列可能會引入其他副作用,例如 lambda 已洗掉 C 20 中的復制賦值運算子,并且無法轉換為函式指標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/521001.html
標籤:C c 11
