理解C 語言中的Golang 風格的Defer
簡介:
簡介:
在語言語言中,概念延遲執行的實現,類似於Golang 的defer,提供了一種在特定函數返回或退出後執行程式碼的便捷方式。
STL 與函式庫實作:從C 開始14 及更高版本,標準範本庫(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>
用法:
<code class="cpp">defer { // Code to be executed after the function returns };</code>
範例:
<code class="cpp">#include <cstdint> #include <cstdio> #include <cstdlib> bool read_entire_file(char *filename, std::uint8_t *&data_out, std::size_t *size_out = nullptr) { ... defer { std::fclose(file); }; // Automatically close the file ... }</code>
優點:
結論:這個自訂defer 實作提供了一種方便且有效率的方法來在C 中實作延遲執行,提供與Golang 的defer 關鍵字類似的功能,而不需要自訂類別或額外的依賴項。
以上是如何在 C 中實作 Golang 風格的 Defer ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!