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中文网其他相关文章!