我不知道該怎麼稱呼這個問題,抱歉。lambda函數中的「Capture」變量被解析爲參數
我在C++中有一個函數,它將lambda作爲參數。
void LoopPixels(cv::Mat &img, void(*fptr)(uchar &r, uchar &g, uchar &b)) {
// ...
fptr(r, g, b); // Call the lambda function
}
然後我試圖調用這個LoopPixels
函數。
int threshold = 50;
LoopPixels(img, [](uchar &r, uchar &g, uchar &b) {
r *= (uchar)threshold; // Unable to access threshold :(
});
我的問題是,我不能從lambda函數內部訪問threshold
變量,如果我嘗試「捕捉」它[&threshold](uchar &r...){}
,我收到一個錯誤,告訴我,我解析成LoopPixels
是拉姆達錯誤的類型。
錯誤消息:
從沒有合適的轉換函數 「拉姆達[]空隙(UCHAR & R,UCHAR &克,UCHAR & B) - >空隙」 到「無效(*)(UCHAR & R,UCHAR &克,UCHAR &二)」 存在
如何我已經解析爲福拉姆達內訪問變量nction的論點?
只捕獲任何東西的lambda表達式可以轉換爲函數指針。將您的函數更改爲模板,並將函數指針更改爲模板參數。 – rustyx
好吧,我改功能 '模板 無效LoopPixels(CV ::墊與IMG,T * FPTR)' 和我得到'不能匹配型 'T *' 對' –
Acidic
你傳遞一個lambda,而不是一個指針。因此錯誤消息。 –