問題タブ [stdoptional]

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.

0 投票する
2 に答える
3462 参照

c++ - Xcodeでstd::optionalサポートを取得するには?

Xcode 12.0 Mac OS プロジェクトで std::optional を使用しようとしています。エラーが表示されます: 名前空間 'std' に 'optional' という名前のテンプレートがありません

私の設定は次のとおりです(プロジェクトにはlibc ++が必要です):

ここに画像の説明を入力

0 投票する
4 に答える
444 参照

c++ - std::optional を別の std::optional に変換する

次のように、オプションの構造体を返すメソッドがあります。

オプションの作成者を返す別のメソッドでこのメソッドを呼び出したいと思います。問題は、次のように、メソッドを呼び出す前に getBook によって返されるオプションが入力されているかどうかを実装が常にチェックする必要があることです。

オプションが満たされている場合はメソッドが呼び出され、オプションが空の場合std::nulloptは返されるように、これをより短い方法で記述する方法はありますか。このようなもの(これは現在機能しないことはわかっていますが、私の主張は理解できます):

0 投票する
3 に答える
117 参照

c++ - C ++でオプションをアンパックするための冗長なイディオムはありますか?

私が現在取り組んでいるプロジェクトでget_optional_fooは、std::optional を返す次のような多くのコードを書いていることに気づきました。

null オプションを取得した場合、関数から抜け出したい。それ以外の場合は、オプションではない変数を値に割り当てたいと考えています。オプションにプレフィックスを付けるという規則を使い始めましたがmaybe_、オプションに一時的なものをまったく使用する必要がないように、これを行う方法があるかどうか疑問に思っていますか? この変数は、null オプションをチェックし、値があるかどうかを逆参照するためにのみ使用されます。

0 投票する
1 に答える
91 参照

c++ - オブジェクトを即座に破壊せずに作成するときにエラー処理に std::optional を使用する方法は?

エラー処理は、C++ コンストラクターでの課題です。いくつかの一般的なアプローチがありますが、そのすべてに明らかな欠点があります。たとえば、例外をスローすると、コンストラクターの早い段階で割り当てられたリソースのリークが発生する可能性があり、エラーが発生しやすいアプローチになります。静的init()メソッドを使用することも一般的な解決策ですが、RAII の原則に反します。

このテーマを研究していると、この回答とブログで という名前の C++17 機能の使用を提案していることがstd::optional<>わかり、有望であることがわかりました。ただし、この種のソリューションには根本的な問題があるようです。ユーザーがオブジェクトを取得すると、デストラクタが即座にトリガーされます。

問題を説明する簡単なコード例を次に示します。私のコードは上記のソースに基づいています

このプログラムの出力は次のようになります。

その後、2 回削除しようとしたため、(少なくとも Visual C++ 環境では) 実行時エラーが発生しましたa->_buf

coutこの問題が非常に複雑なコードをデバッグしていることがわかったので、読者の便宜のために使用しましたが、問題は明らかです - のreturnステートメントA::make()はオブジェクトを構築しますが、それはA::make()スコープの終わりであるため、デストラクタが呼び出されます。ユーザーは、オブジェクトが初期化されていることを確認します (どのようにメッセージが表示されたかに注意して"OK"ください)。実際には、オブジェクトは破棄されています。if()maina->~A()

それで、私はこれを間違っていますか?コンストラクターでの for エラー処理の使用std::optionalは一般的です。前もって感謝します