什麼是 C 語言中的標準 Defer/Finalizer 實作?
受 Go 啟發,「延遲」函數的概念允許延遲當前作用域退出後執行指定任務。這允許在到達程式碼中的特定點時觸發資源清理、日誌記錄或其他操作。
STL 和 Boost 實作
C 標準函式庫 (STL) 和 Boost 函式庫不提供延遲類別的內建實作。但是,有一些第三方函式庫可以解決此功能。
自訂延遲實作
如果無法選擇外部函式庫,則可以使用下列自訂實作類比延遲功能:
<code class="cpp">struct defer_dummy {}; template <class F> struct deferrer { F f; ~deferrer() { f(); } }; template <class F> deferrer<F> operator*(defer_dummy, F f) { return {f}; } #define DEFER_(LINE) zz_defer##LINE #define DEFER(LINE) DEFER_(LINE) #define defer auto DEFER(__LINE__) = defer_dummy{} *[&]()</code>
用法
要使用此實現,只需編寫:
<code class="cpp">defer { statements; };</code>
範例
考慮以下事項
<code class="cpp">#include <cstdio> #include <cstdlib> defer { std::fclose(file); }; // don't need to write an RAII file wrapper. // File reading code... return 0;</code>
以上是如何在 C 中實現延遲功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!