問題タブ [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 で const 値型を再割り当てさせない
の4つのバリエーションがあるべきだと私には思えますboost::optional
optional<Foo>
=> 変更可能な Foo を保持し、初期化後に再割り当てできますoptional<Foo const> const
=> const Foo を保持し、初期化後に再割り当てできませんoptional<Foo> const
=> (すべき?) 変更可能な Foo を保持しますが、初期化後に再割り当てすることはできませんoptional<Foo const>
=> (すべき?) const Foo を保持し、初期化後に再割り当てできます
最初の 2 つのケースは期待どおりに機能します。ただし、optional<Foo> const
const Foo への逆参照、および初期化後の再割り当ては許可されません (この質問optional<Foo const>
で触れたように)。
const 値型の再割り当ては、特に私が遭遇したものであり、エラーは次のとおりです。
/usr/include/boost/optional/optional.hpp:486: エラー: 'Foo& Foo::operator=(const Foo&)' の 'this' 引数として 'const Foo' を渡すと修飾子が破棄されます [-fpermissive]
そして、それはここで起こります:
構築後、実装は、optional をパラメーター化した型の代入演算子を使用します。明らかに、定数値である左側のオペランドは必要ありません。しかし、次の場合のように、非 const オプションを新しい const 値にリセットできないのはなぜですか。
いくつかの質問:
これを望むことは概念的には問題なく、それができないのは実装のまぐれにすぎないというのは正しいですか?
ブースト ソースを編集しない場合、boost::optional を完全に破棄せずに上記のループのようなロジックを実装するクリーンな方法は何でしょうか?
これが理にかなっていて、boost::optional ソースを編集する必要がある場合 (可動タイプをサポートするために既に実行しなければなりませんでしたが、すぐに自分でそれを行うと思われます)、最小限の侵襲的な変更を行う可能性がありますトリックをしますか?
c++ - c++11でのboost::optionalの実装
私は、c++11機能を使用したデータ構造のようなboost::optionalの実装を実験しています。これが私がこれまでに持っているものです:
無制限のユニオン機能を使用して、動的に割り当てられるスペースの代わりに、その場で格納できるオプションの値用に適切に配置されたスペースを作成します。参照を使用して多分<>を作成する場合を除いて、ほとんどの場合は機能します。たとえばmaybe<int&>
、g ++ 4.7は次のように文句を言います:
多分クラスストア参照を作成するにはどうすればよいですか?クラスに対するその他の改善/提案も歓迎します。
c++ - 「何も返さない」関数を実装する場合、boost::optional をいつ使用し、いつ std::unique_ptr を使用しますか?
私が理解していることから、結果を返さないことがある関数を実装できる 2* の方法があります (たとえば、ppl のリストで見つかった人)。
*- raw ptr バージョンを無視し、bool フラグとペアにし、バージョンが見つからない場合は例外とします。
また
では、どちらかを優先する理由はありますか?
c++ - boost:: const メンバーのオプション
なぜこれが機能しないのですか?
代わりに代入演算子を使用しようとしているようです。初期化されていないメモリで O のコピー コンストラクターを呼び出すと想定していました。
c++ - ブーストを防ぐ方法::オプション0? で誤って構成されないようにします。
boost::optional<T>
(1.51) は、ユーザーにとって非常に危険であり、防止したいオブジェクトを構築する方法を提供します。独自の整数クラスがあり、オプションのそのような整数を渡し、それをいくつかのクラスに格納したいとしましょう:
そして今、ユーザーがクラスを使用する方法は次のとおりです。
ここで何が起こっているのかを理解し、この動作を防ぎたいと思います。
興味深いことに、
boost::none
私のフィールドでは完全に有効な値ですがboost::none
、ユーザーが入力しようとしているときにこっそりと入力すると、0
ひどく誤解を招き、危険です。
myint
クラスを実際にロールアウトするわけclass myclass
ではなく、ほとんどまたはまったく目的を果たさない を実際に持っていないため、意図は少し隠されている可能性があります。とにかく、関数に 10 個程度のオプションの int を送信する必要があり、重複排除は機能しません。(私があなたの年齢、身長、財産を尋ねたのと、質問に答えたくない場合に確認するための 3 つの特別なボタンがあることを想像してみてください)
以下に機能するように見える回答を投稿しました(MooingのDuck&Ilonesmizの提案から作成されましたが、より軽量です)。でも、コメントいただけると嬉しいです。
c++ - ブースト スピリット カルマ 複数のオプション
解決策が表示されないというエラーが表示されます。まず、関連するコード:
そのrange %=
部分で、コンパイルエラーが発生します
RangeEntry を ulong_ ルールに一致させようとしていると推測していますが、その理由がわかりません。私は何が欠けていますか?
c++ - boost::boost::variant 型を使用したオプションの参照
私は現在、ゲームのコードを書いています。その一部には、ゲームでこれまでに行われたアクションの履歴を作成することが含まれます。この履歴は、state_pair_t
のアクションのペア ( action_t
) と、アクションが行われた後の結果のゲーム状態へのポインターのベクトルに格納されます。現在、最新の時点から履歴を調べ、特定のタイプのアクションが見つかるまで逆方向に反復し、それへの参照を返す関数があります。no_action
ここで、boost optional を使用してアクションが見つからない場合に を返し、 を使用boost::optional
して、値を返す必要があるが返す値がない可能性があるこれらの関数を処理するのが良い設計上の動きであると判断しました。実際にこれを実装しようとすると、理解できないエラーが発生します。
これにより、コンパイルエラーが発生します。
これを少し変更すると、次のようになります。
別のエラーが発生します:
これらのエラーのいずれかがここで何を伝えようとしているのかわかりません。私がここでやろうとしていることは、良い考えではありませboost::optional
んか? それは可能ですか?
c++ - constexpr 関数からオプションを返すことはできますか?
- 関数
optional
からを返すことはできますか?constexpr
- なんで?
- はいの場合、どのように機能しますか?
と の両方に興味がboost::optional
ありstd::optional
ます。彼らは同じように振る舞いますか?
c++ - std::optional をどのように使用すればよいですか?
のドキュメントを読んでいて、それが何をするかについてはよくわかっていますが、いつ、どのように使用すればよいかstd::experimental::optional
わかりません。このサイトにはまだ例が含まれていないため、このオブジェクトの真の概念を理解するのが難しくなっています. いつ使用するのが適切な選択であり、以前の標準 (C++11) で見つからなかったものをどのように補うか。std::optional