錆の関数std::mem::drop
は、引数を移動してスコープ外に出て破棄します。同じような関数をC++で書こうとする私の試みは次のようになります:標準ライブラリにRustの `std :: mem :: drop`と同等のC++がありますか?
template <typename T,
typename = std::enable_if_t<std::is_rvalue_reference<T &&>::value>>
void drop(T &&x) {
T(std::move(x));
}
このような関数は標準ライブラリにすでにありますか?
編集:この機能を使用して、スコープから外れる前にオブジェクトのデストラクタを呼び出すことができます。破棄されるとすぐにファイルハンドルを閉じるクラスを考えてみましょう。議論のために、ofstream
にclose
メソッドがないとします。
ofstream f("out");
f << "first\n";
drop(move(f));
// f is closed now, and everything is flushed to disk
なぜこのようなC++が必要なのか分かりません。これはあなたのユースケースですか? –
私が知る限り、その呼び出しの後で使用するために、指定された変数を無効にするために呼び出すことはできません。ブロックを代わりに使用することは可能ですか? '{T x; }/* xが範囲外です*/' – Ryan
新しい言語を学ぶときには、異なるイディオムを使用する必要があります。 'drop'が慣用的なC++のようなものになるケースは私には分かりません。私は正直なところ、なぜあなたがそれを望むのかという単一の理由を考えることができません。 –