我在傳遞類指針作爲lambdas回調中的參數時出現問題。Lambdas和傳遞一個指針類作爲參數
引擎收錄:http://pastebin.com/SqXHtGDt
我如何定義回調:
typedef void (*cb_prescription)(Prescription * prescription);
我如何使用回調:
void loop_prescriptions (cb_prescription callback, bool add = true)
{
for (int i = 1; i <= prescriptions->noOfElements(); i++) {
Prescription * prescription = (Prescription *) prescriptions->removeNo(i);
if (add) {
prescriptions->add(prescription);
}
callback(prescription);
}
}
我知道一切正常,除了參數指針部分。
loop_prescriptions ([&] (Prescription * paper) { paper->something(); });
我得到的錯誤:
錯誤:無法轉換 'list_prescriptions_by_doctor()::' 到 'cb_prescription {又名無效()(處方*)}' 的說法 '1'到'void loop_prescriptions(cb_prescription,bool)' }); *
有誰知道我如何使用參數不正確? 我試圖添加指針的參考* &,只是刪除指針,但List類(是的,我必須使用這個)返回一個類指針,所以我不能簡單地使用副本。
感謝您的幫助!
UPDATE 我已經根據答案更新了我的pastebin,它提供了一個工作解決方案。 http://pastebin.com/7yTPGEQx
您無法將有狀態的lambda(可捕獲任何內容)轉換爲函數指針。這就是錯誤所說的。要麼不使用(非全局)狀態,要麼修改'loop_prescriptions'簽名。 – Yakk
所以我需要事先將所需的任何參數傳遞給lambda範圍? – andersfylling
不,如果您打算使用回調類型和所有使用該回調類型的類,則必須使用上下文無關的lambda表達式。不錯,如果你需要這個上下文,那麼你需要相應地改變回調類型。 – user3159253