問題タブ [boost-optional]
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++ - boost::optional の使用に失敗しました
オブジェクトまたはnullを返す可能性のある関数にオプションのブーストを使用しようとしましたが、それを理解できません。これが私がこれまでに持っているものです。この問題を解決する方法についての提案をいただければ幸いです。
アップデート:
これは私の新しいコードで、コンパイル エラーが発生します。value = {200};
c++ - boost::optional からオブジェクトを取得する
メソッドがこのようなものを返すとします
今、私はこのようなものを持っているとします
今私の質問は、 SomeClass を val から抽出するにはどうすればよいですか?
私はこのようなことができるように:
c++ - ブースト::オプションの効率とは?
私は次のものを持っています:
問題は、complexMap の一部のエントリでは StrMap が空になり、まったく使用しないため、効率のために boost::optional を使用することを検討しています。私の質問は、boost::optional の効率はどのようなものかということです。残念ながら、その代価を支払うことで、最終的には何も得られないでしょう。
c++ - std::optional を使用していますint を使用するのと同じくらい効率的ですか?
Quad-/octree データ構造があります。セルの子インデックス/ptrsを配列に格納しています。配列内の各位置は、親に対する子の位置を表します (例: 2D):
Integer
子の最大数は、型が表現できる値のサブセットであることを知っています。-1
したがって、 forInteger = int
やstd::numeric_limits<unsigned>::max()
forのような「魔法の」値を使用して、セルに子がないかどうかを識別できますInteger = unsigned
。これはstd::optional<Integer>
想定できないことです。
私が理解している限りでは、この魔法の値の使用は の存在理由の 1 つですstd::optional
。std::vector<std::optional<int>>
それでも、 in inner loops の性能が気になります。
そう、
のパフォーマンスは のパフォーマンス
std::vector<std::optional<int>>
より悪くなりstd::vector<int>
ますか? (私はすでに「存在しない」値の比較を行っています)。std::optional
または、 raw と同じパフォーマンスを提供するようにの実装を最適化できint
ますか? そしてどうやって?
関数の戻り値の型とマジック値をデータ構造に混在std::optional
させるのは、非常に悪い考えのように思えます。私は一貫性を保ち、どちらか一方を (少なくとも同じコンテキスト内で) 使用することを好みます。マジック ナンバーとの比較を実行する関数をオーバーロードすることはできますが、次のようにします。
オプションタイプの場合。
c++ - std::optional から移動する方法
データを解析し、結果を次の関数に渡す次の例を考えてみましょう。
std::optional
では、失敗した解析ステップを処理するためにを使用してコードを変更しましょう。
からの移動は有効ですoptional<T>::value()
か? 大丈夫なら、それstd::optional
も有効ですboost::optional
か?
c++ - C++ optional<> およびコピー不可オブジェクトの遅延構築
以下のコードを参照してください。
問題は、optional<> を使用して、コピーできないオブジェクトの構築を遅らせるにはどうすればよいかということです。
この例ではboost::optionalを使用していますが、現在はstd::optional標準にも含まれていると思います。
はい、scoped_ptr<> を使用できますが、ヒープではなくスタックに割り当てたいと考えていました。
私は g++ を使用していますが、この場合は C++03 であるか C++11 であるかは問題ではないと思います。これは、単なるコードの詰め込みではなく、基本的な設計上の問題です。
リクエストに応じて、いくつかのエラー メッセージが表示されました。これについては、コメントを外しました。
in_place を直接使用することを提案する回答があり、これで機能します。
しかし、これではありません:
エラーメッセージ:
c++ - プロセス間メモリで boost::optional を使用しても安全ですか?
次の構造体を検討してください。
boost::interprocess を使用して共有メモリ領域を作成しています。boost::optional についての私の理解は、null 許容ポインターではなく、識別された共用体であるということでした。反例として、ヒープを使用する std::map や std::vector のようなものは、プロセス間メモリでそれらを使用するために明示的なアロケーターが必要ですが、boost::optional はヒープを使用しないとかなり確信していました。書き込み:
そのため、箱から出して使用することができます。誰かがこれを確認してくれたらうれしいです-プロセス間のケースがboost::optionalドキュメントで明示的に言及されていることはわかりませんでしたが、暗示されているだけです。