問題タブ [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.

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

c++ - ブール値へのオプションの暗黙的な変換をブーストしますか?

私はいくつかのコードを読んでいて、理解できないものに出くわしました。Boost::optional 値が初期化されているかどうかをテストします。マクロを提供する gtest フレームワークを使用しますASSERT_TRUE()

なぜ!!beforeが必要なのoptですか? boost::optionalマクロに必要な bool に暗黙的に変換されていませんか? ASSERT_TRUE(opt)opt が正しい値を保持しているかどうかを確認するために使用するだけで十分だと思いましたか?

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

c++ - ポインターを返すことができるのに boost::optional を使用する理由

find必要なものが見つからないことがある関数がある場合、その関数がポインタを返すようにして、 a が見つからなかったことを示すようにする傾向がありますnullptr

例えば

Student が存在する場合は、見つかったStudentオブジェクトへのポインターを返します。それ以外の場合は、を返しnullptrます。

boost::optionalもこの目的のために支持されているのを見てきました。たとえば、「何も返さない」関数を実装したい場合、boost::optional をいつ使用し、いつ std::unique_ptr を使用しますか?

私の質問は、この場合、ポインターを返さないのが最善の解決策ではないということです。すなわち、照会された項目が見つからない可能性があります。その場合、nullptr を返すことは完璧な解決策です。boost::optionalのようなもの(または他の同様のソリューション)を使用する利点は何ですか?

findStudent私の例では、 が所有するオブジェクトへのポインタのみを返すことに注意してくださいSomeClass

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

python - boost::optional を使用して boost::python をラップする

型オブジェクトをラップboost::optional<T>して公開する方法はありますかboost::python::class_(から使用BOOST_PYTHON_MODULE)

この場合、Pythonで期待するのは AttributeError です

の値がbarまだ設定されていないためです。そしてTypeErrorいつ

barintタイプです。

boost::python::indexing_suiteもう 1 つの関連する問題は、コンテナー型のクラスのオブジェクトを同じ方法でエクスポートすることです。

boost::python問題はapiを使用して解決できますか?

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

c++ - 複数の表現を持つアイテムの C++ デザイン パターン

データを 3 つの方法で表現できる「アイテム」があります。ランタイム コストで、ある表現から他の表現に変換できます。変換を行ったら、新しい表現を維持したいと思います。コアデータを「変更」することなく、データの表現を他の表現に変換できます。ランタイム コストがかかるため、データの 3 つの表現を含むクラスが必要です。いつでも、そのうちの 1 ~ 3 個が有効になります。

これの本当のポイントは、ユーザーが何かを要求できるアクセス方法もあるからです。この何かは、1 つ以上の表現から取得できます。たとえば、表現 1 から「範囲」を取得し、表現 2 または 3 から「ボリューム」を取得できます。

私の解決策は、メンバーデータとして3つの表現を持つクラスを作成することでした(そしてそれらが有効かどうかを知る方法)。次に、必要な表現を内部的に認識し、必要に応じて作成する getRange() メソッドを作成しました。これは正常に機能し、get メソッドを const にできないことを除いて、すべての問題を解決します。

したがって、このソリューションの実際の問題は、このクラスの「定数」インスタンスでさえ、内部的に他の表現を作成する可能性があるため、実際には const ではないことです。ただし、表現を変更してもコアデータは変更されないため、実際には「一定」です。

このクラスに役立つ C++ デザイン パターンはありますか? 助言がありますか?

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

c++ - ブーストオプションは継承を認識しますか?

func は、基本と派生の両方のオプションを受け入れますか?

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

c++ - 範囲ベースの for ループ式の一時的なオプション

を返す関数があるとしますstd::optional<A>。では、範囲ベースの for ループで結果を使用する適切な方法は何ですか? 最も簡単な方法は機能しません。

T optional::value() &&の代わりにがあれば、この問題は存在しませんT&& optional::value() &&が、STL と Boost の両方が 2 番目の方法で定義しています。

この状況を処理する適切な方法は何ですか? 私が考えることができる両方のソリューションが好きではありません(サンドボックス):

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

c++ - boost::optional タイプの説明が必要

boost::optional 型変数に関して、コア ファイルから取得したいくつかの詳細を理解しようとしています。

変数:

コアからのフレーム #5:

このフレームで実行されている行は次のとおりです。

その結果、クラッシュに至るまでのいくつかのフレームは、ライブラリ コードを後押しすることを示しています。

フレーム #0 は のデストラクタCacherが呼び出される場所であり、クラッシュはオブジェクトが保持するメモリが既に解放されているためです。

私の質問:

  1. boost::optionalによって保持されているメモリcacher_が有効であることを示していますか?
  2. boost::noneに割り当てた結果cacher_、オブジェクトは破棄されますか?

問題を診断するための詳細が不十分な場合は、お詫び申し上げます。回答に基づいて、追加の詳細を提供しようとします。

ありがとう!

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

c++ - boost::optional による例外のキャッチとラップ

boost::optionalライブラリ コードによって生成された例外をキャッチし、それらをs (または)でラップしたいと考えていますstd::experimental::optional。私のコードは些​​細なケースでは機能しますが、オーバーロードされた関数を呼び出すときに正しい型を推測するのは困難です。テストケースをこれに減らしました:

「壊れた」例をコンパイルしようとすると、次の出力が得られます。

正しい型の関数ポインタを作成することで問題を回避できますが、これは理想的ではありません。私の問題の解決策はありますか、それとも醜い関数ポインタのハックに悩まされていますか?

乾杯、ライアン

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

c++ - boost/optional.hpp をインクルードする場合の C2143 構文エラー

理解できないコンパイル時エラーで立ち往生しています。boost::optionalコードで使用しようとしましたが、インクルードするとすぐboost/optional.hppにプロジェクトをビルドできなくなりました。この include ステートメントをコメントアウトすると、機能します。クラス ヘッダーの include ステートメントだけです (以下の完全なboost::optionalヘッダーを参照)。コンパイラ エラーはC2143 syntax error: missing ',' before '<'、別の Boost ヘッダーで発生するものですboost/utility/compare_pointees.hpp(以下の GitHub リンクを参照)。同じプロジェクトのように、Boost の他のものもうまく使用しboost::filesystem::pathているので、Boost ディストリビューション自体に問題はないはずです。

ここに私の環境があります:Microsoft Visual Studio Professional 2015 Version 14.0.25431.01 Update 3boost 1.62.0. 私はサードパーティのライブラリC++ REST SDKも使用しています。それ以外はすべて C++ 標準ライブラリのものです。

私のヘッダーは次のようになります。boost::optional<size_t>戻り値の型として新しいメソッドを追加したい。

コンパイラ エラーが報告される場所は、Boost ヘッダーboost/utility/compare_pointees.hppの 36 行目です。このファイルの全内容は、GitHub のhttps://github.com/boostorg/utility/blob/boost-1.62.0で確認できます。 /include/boost/utility/compare_pointees.hpp

コンパイラの出力には、次のメッセージしか表示されません。

Boost ライブラリの問題ではありません。しかし、クラスやプロジェクトの設定の何が問題なのか、どうすればわかりますか?

PS プロジェクトでこれらの最も基本的なヘッダーとソース ファイルを使用しても、動作を再現できます。

ヘッダファイルTest.h:

ソースファイルTest.cpp: