C 中“延遲”功能的自定義實現
在C 中,“延遲”的概念涉及在最後執行特定操作特定範圍或代碼塊的。雖然 STL(標準模板庫)和 Boost 庫不提供此功能的內置實現,但可以使用以下代碼片段創建自定義解決方案:
#ifndef defer
struct defer_dummy {};
template struct deferrer { F f; ~deferrer() { f(); } };
template deferrer 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
用法:
defer 宏可以在特定範圍內使用,以定義當該範圍結束時將執行的代碼塊。語法如下:
defer {
// Code to be executed at the end of the current scope
};
示例:
在以下示例中,在read_entire_file 函數中使用defer 宏,以便在函數退出時自動關閉輸入文件:
#include
#include
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
}
優點:
注意:
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3