使用std::function,除非有令人信服的理由不使用
在C 中使用回呼函數時,可以選擇使用C 風格的函數指標和較新的std::function 可能是一個有爭議的問題。讓我們來看看每個選項的優缺點。
C 風格函數指標:
std::function:
何時使用 std::function:
在大多數情況下,std::function 是首選。它比函數指標更靈活且面向未來。除非有特定的效能問題,否則通常建議使用 std::function 來傳遞回呼。
何時使用函數指標:
如果效能至關重要考慮到回調函數不需要擷取任何上下文變量,那麼函數指標可能是更好的選擇。不過這種情況比較少見。
第三個選項:模板參數
如果您希望回調函數是任何可呼叫對象,請考慮使用模板參數。這種方法提供了靈活性,但需要在標頭中實作外部函數。
總表:
Feature | Function Pointer | std::function | Template Parameter |
---|---|---|---|
Can capture context | No | Yes | Yes |
Call overhead | None | Small | None |
Can be inlined | No | No | Yes |
Can be stored in class member | Yes | Yes | No |
Implemented outside of header | Yes | Yes | No |
Supported without C 11 standard | Yes | No | Yes |
Readability | Poor | Good | Fair |
結論:
總的來說,std::function 的優點超過了函數指標。它更加靈活、面向未來且可讀。僅當存在特定效能問題或回調函數不需要捕獲任何上下文變數時才使用函數指標。
以上是std::function 與函式指標:什麼時候該選擇什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!