在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中文網其他相關文章!