首頁 > 後端開發 > C++ > 如何從移動捕獲 Lambda 創建'std::function”?

如何從移動捕獲 Lambda 創建'std::function”?

DDD
發布: 2024-12-24 10:12:37
原創
373 人瀏覽過

How Can I Create an `std::function` from a Move-Capturing Lambda?

從移動捕獲Lambda 創建std::function

從僅移動類型創建std::function,例如作為移動捕獲lambda,由於移動構造函數的限制,可能會導致錯誤。這個限制源自於 std::function 的定義和建構方式。

理解std::function 建構子

std::function 建構子可以兩種方式:

  1. std::function (F f);
  2. std::function(allocator_arg_t, const A& a, F f);

在這兩種情況下,lambda (F) 必須是可複製構造的。這表示您無法將 lambda 直接移至 std::function 中。

此外,運算子 = 是根據建構子和交換定義的,這意味著應用相同的限制。

僅移動類型的後果

因此,不可能從 a 構造 std::function捕獲僅移動類型的移動捕獲 lambda。由於隱式刪除的複製建構函數,嘗試這樣做將導致編譯時錯誤。

替代解決方案

要解決此問題,您可以使用一個shared_ptr來包裝僅移動類型,然後在lambda中捕獲shared_ptr。 Shared_ptr 將確保類型是可複製的,並允許您從 lambda 建立 std::function。

以上是如何從移動捕獲 Lambda 創建'std::function”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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