從移動捕獲Lambda 創建std::function
從僅移動類型創建std::function,例如作為移動捕獲lambda,由於移動構造函數的限制,可能會導致錯誤。這個限制源自於 std::function 的定義和建構方式。
理解std::function 建構子
std::function 建構子可以兩種方式:
在這兩種情況下,lambda (F) 必須是可複製構造的。這表示您無法將 lambda 直接移至 std::function 中。
此外,運算子 = 是根據建構子和交換定義的,這意味著應用相同的限制。
僅移動類型的後果
因此,不可能從 a 構造 std::function捕獲僅移動類型的移動捕獲 lambda。由於隱式刪除的複製建構函數,嘗試這樣做將導致編譯時錯誤。
替代解決方案
要解決此問題,您可以使用一個shared_ptr來包裝僅移動類型,然後在lambda中捕獲shared_ptr。 Shared_ptr 將確保類型是可複製的,並允許您從 lambda 建立 std::function。
以上是如何從移動捕獲 Lambda 創建'std::function”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!