C 中「延遲」功能的自訂實作
在C 中,「延遲」的概念涉及在最後執行特定操作特定範圍或代碼塊的。雖然STL(標準模板庫)和Boost 庫不提供此功能的內建實現,但可以使用以下程式碼片段建立自訂解決方案:
<code class="cpp">#ifndef defer 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{} *[&]() #endif // defer</code>
用法:
defer 巨集可以在特定範圍內使用來定義在該範圍結束時將執行的程式碼區塊。語法如下:
<code class="cpp">defer { // Code to be executed at the end of the current scope };</code>
範例:
在以下範例中,在read_entire_file 函數中使用defer 宏,在下列情況下自動關閉輸入檔:函數退出:
<code class="cpp">#include <cstdlib> #include <cstdio> bool read_entire_file(char *filename, std::uint8_t *&data_out, std::size_t *size_out = nullptr) { if (!filename) return false; auto file = std::fopen(filename, "rb"); if (!file) return false; defer { std::fclose(file); }; // don't need to write an RAII file wrapper. // ... Remaining code }</code>
好處:
注意:
以上是如何在不依賴 STL 或 Boost 函式庫的情況下用 C 實現「延遲」功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!