問題タブ [scopeguard]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++11 - std::unique_ptr と lambdas を使用してオブジェクトの状態を進める
オブジェクトの状態を進める場合、std::swap
単純なオブジェクトとポインタのスワップには を使用するとうまく機能します。他のインプレース アクションの場合Boost.ScopeExit
はかなりうまく機能しますが、関数間で終了ハンドラーを共有したい場合はそれほどエレガントではありません。似たようなことを達成するためのC++ 11ネイティブの方法はありますBoost.ScopeExit
が、より良いコードの再利用を可能にしますか?
c++ - ScopeGuard11 と Boost.ScopeExit の違い - 後方互換性だけですか?
私は最近、Andrei Alexandrescu の 'C++ and Beyond 2012' ( Systematic Error Handling with C++ ) でのトークを見ました。そこで彼は ScopeGuard11 の構成について、具体的にSCOPE_EXIT
(トークの第 2 部、または単にコードをここで読む) について説明しています。同時に、Boost ライブラリを調べ始めて、BOOST_SCOPE_EXIT
マクロ ( Boost.ScopeExit ライブラリ) に気付きました。
これらの 2 つは、実装に関してはまったく異なるようです (BOOST_SCOPE_EXIT
を使用Boost.TypeOf
し、ScopeGuard11 のようなものは何もありませんSCOPE_EXIT
)。また、Boost マクロは、C++11 ではあまり問題にならないパラメータ キャプチャなどに関係しています。しかしそれ以上は、基本的に同じ機能を提供しているようです。
私は正しいですか、それとも何か不足していますか? ScopeGuard11 は、Boost.ScopeGuard と同じ機能を備えた「よりクリーンな」メカニズムですが、下位互換性は低いと言えますか?
c++ - C++: なぜこの単純なスコープ ガードが機能するのですか?
これまでにスコープガードを見たものはすべて、ガードブール変数を持っています。たとえば、次のディスカッションを参照してください: 最もシンプルできちんとした c++11 ScopeGuard
ただし、単純なガードは機能します (gcc 4.9、clang 3.6.0):
一時コピーが破棄されないのはなぜですか? この動作に依存するのは危険ですか?
c++ - スコープガード使用時の警告を回避するには?
フォリー スコープ ガードを使用していますが、機能していますが、変数が使用されていないという警告が生成されます。
コード:
そのような警告を回避するにはどうすればよいですか?
c++ - C++ で一時オブジェクトの有効期間を延長する方法はありますか?
スコープの終了時に値をリセットするスコープ ガードを作成しました。
このスコープ ガードが関数から返された場合、スコープ ガードが保存されていない場合、スコープ ガードがすぐに破棄されるのを防ぐ方法はありますか?
例えば:
現在書かれている方法では、関数の 1 つを呼び出す人は、常に ResetGuard をローカル変数に保存することを覚えておく必要があります。そうしないと、すぐに値がリセットされます。
私がやろうとしていることに関するいくつかのコンテキスト
文字列をフォーマットして操作するためのライブラリを作成しています。浮動小数点数のフォーマット方法を制御するグローバル変数が 1 つあります。グローバル変数が一般的にひどい考えであることはわかっていますが、ご容赦ください。
グローバル変数を慎重に使用することにしました。グローバル変数を使用する代わりに、書式仕様を含むオブジェクトを渡すことができます。このオプションは最終的に実行不可能であることが判明しました。私のライブラリは、 への暗黙的な変換を提供するすべてのオブジェクトで動作するように設計されていますstd::string
。書式設定オプション (または実際には任意のパラメーター) を暗黙的な変換関数に渡す方法はありません。したがって、グローバル変数を使用する必要がありました。