實作std::function 來實現多功能可調用性
std::function 提供了一種封裝和儲存任何類型的可調用性的方法,同時維護固定大小。儘管其內容大小不同(例如 lambda 表達式),std::function 透過稱為類型擦除的技術實現了這種一致性。
多種可呼叫物件的類型擦除
類型擦除涉及建立由基類表示的公共介面。對於 std::function,callable_base 類別定義了一個由衍生類別為特定可呼叫型別實作的虛擬函式operator()。這種方法使 std::function 能夠儲存指向基底類別的指針,從而允許它包裝任何可呼叫物件。
由於每個可呼叫物件可能有不同的實現,因此衍生類別是透過 std::function 管理動態建立的堆內分配。
複製行為和內部狀態
複製 std::function 時,內部可呼叫實體是複製的,而不是共享的。這種行為在以下測試中很明顯:
第一次調用 f1 後的增量不會影響 f2,這表明 f2 有自己的可調用實體副本。
以上是`std::function` 如何實現具有一致大小的多功能可呼叫性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!