首頁 > 後端開發 > C++ > 為什麼我無法從具有不可複製物件的移動捕獲 Lambda 建立'std::function”?

為什麼我無法從具有不可複製物件的移動捕獲 Lambda 建立'std::function”?

Linda Hamilton
發布: 2024-12-18 13:25:24
原創
866 人瀏覽過

Why Can't I Create an `std::function` from a Move-Capturing Lambda with a Non-Copyable Object?

從移動捕獲Lambda 表達式建立std::function:揭示限制

在C 領域,構造std::function 的任務來自移動捕獲lambda 表達式經常出現。雖然移動捕獲 lambda 表達式本身可以無縫創建,但問題在於無法將它們封裝在 std::function 中。

如我們的範例所示:

這個範例毫不費力地構造一個移動捕獲 lambda 表達式,不會遇到任何障礙。然而,當嘗試在std::function 中包含這個lambda 時,我們遇到了一系列錯誤:

深入研究std::function 類別的複雜性,我們發現以下構造函數:

這個建構子揭示了根本問題:它需要封裝的函式F 是可複製的構造。然而,我們的移動捕獲 lambda 表達式不符合這個標準;相反,它會移動捕獲一個不可複製構造的物件。

因此,我們得出的結論是,雖然從移動捕獲 lambda 表達式構造 std::function 是可行的,但當 lambda 表達式移動捕獲不可複製構造的對象。在這種情況下,需要替代方法,例如「release/acquire-in-lambda」習慣用法。

以上是為什麼我無法從具有不可複製物件的移動捕獲 Lambda 建立'std::function”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板