C で遅延機能を実装するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-01 14:04:29
オリジナル
919 人が閲覧しました

How to Implement Defer Functionality in C  ?

C での標準 Defer/Finalizer 実装とは何ですか?

Go からインスピレーションを得た「defer」関数の概念により、遅延現在のスコープが終了した後に、指定されたタスクを実行します。これにより、リソースのクリーンアップ、ロギング、またはコード内の特定のポイントに到達したときにトリガーされる必要があるその他のアクションが可能になります。

STL およびブーストの実装

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{} *[&amp;]()</code>
ログイン後にコピー

使用法

この実装を使用するには、単に次のように記述します:

<code class="cpp">defer { statements; };</code>
ログイン後にコピー

Example

次のコードを考えてみましょう:

<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>
ログイン後にコピー

この例では、関数が正常に返ったかどうかに関係なく、defer ブロックによってファイルが閉じられることが保証されます。

以上がC で遅延機能を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!