問題タブ [boost-program-options]
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::program_options と push_back を std::vector で読み取りますか?
エンドポイント エントリのリストを含む構成ファイルがあります。各エントリには [endpt/n] (n 番目のエンドポイント) という見出しが付いており、MAC アドレスと IP アドレスで構成されています。boost::program_options を使用してアドレスを文字列として読み取り、結果を 2 つのベクトルに push_back したいと思います。program_options のドキュメントを調べましたが、探しているものが見つかりませんでした... エンドポイント エントリの例を次に示します。
各エンドポイントの MAC および IP オプションを boost::options_description に追加するために現在使用しているコードは次のとおりです。
このコードは問題なく動作しますが、いくつかの理由から、MAC アドレスと IP アドレスの空のベクトルを宣言し、boost がそれらを読み取るときにオプションをそれらに push_back したいと思います。私はBoostを初めて使用するので、リストを読むためのより良い方法に関する提案やその他の助けをいただければ幸いです. ありがとう!
c++ - 「Google テスト」と「ブースト プログラム オプション」の統合
Google テストを使用するプログラムがあり、オプションを解析するためにプログラム オプション ライブラリをブーストします。問題は、Google テストにも独自のオプション パーサーがあるため、Google テストにオプションを与える前に除外する必要があることです。
たとえば、hello を実行するときは、次のように使用します
--option1 は、 --gtest_filter オプションを Google テストに渡す前に使用するオプションです。
次のコードを実行すると--gtest_filter
、ブースト プログラム オプションに使用するオプションではないため、例外が発生しました。ブースト プログラムのオプションが gtest の入力を認識しないオプションをどのように組み合わせることができますか?
c++ - ブーストプログラムオプションを使用した無効なオプション値の例外
ブースト v1.45.0 プログラム オプションを使用する Visual Studio 2008 C++ アプリケーションがあります。
次のようなコマンド ライン オプションを解析できるようにしたいと考えています。値 [1, 2, 4, 5, 6, 7] をfoo.exe -x 1,2, 4-7
生成します。std::vector< int >
だから、私はカスタムバリデータを書きました:
しかし、カスタム バリデータ コードに到達することはありません。私はいつもparse_command_line
メッセージで例外を受け取ります: in option 'id': invalid option value
.
これを希望どおりに機能させるにはどうすればよいですか?
ありがとう、ポールH
c++ - 列挙型のカスタムバリデーターをブースト
定義した列挙型へのコマンドライン入力を検証しようとしていますが、コンパイラエラーが発生します。作業の例として、Boostのprogram_optionsで複雑なオプションを処理するを使用しました。
そして、必要以上のコードを含めることを惜しまないために、次のようにオプションを追加しています。
コンパイラエラーが必要な場合は投稿できますが、質問をシンプルに見せたいと思っていました。例を探してみましたが、実際に見つけた他の例は、BoostWebサイトのexamples/regex.cppだけでした。
- 私のシナリオと見つかった例の違いはありますか?ただし、私のシナリオは列挙型であり、他のシナリオは構造体です。編集:私のシナリオでは、カスタムバリデーターのオーバーロードは必要ありませんでした。
- 列挙型のvalidateメソッドをオーバーロードする方法はありますか?編集:必要ありません。
c++ - Boost ライブラリ プログラム オプションを使用した必須およびオプションの引数
Boost Program Options Library を使用して、コマンド ライン引数を解析しています。
次の要件があります。
- 「ヘルプ」が提供されると、他のすべてのオプションはオプションになります。
- 「ヘルプ」が提供されないと、他のすべてのオプションが必要になります。
どうすればこれに対処できますか?これを処理するコードは非常に冗長であることがわかりました。簡単に実行できるはずですよね?
c++ - boost::program_options でオプション終了マーカーとして「--」を使用する
コマンド ライン プログラムのオプションの終わりを示す伝統的な方法は、オプションを使用すること--
です。これをオプションとして認識し、コマンドラインの残りの部分を位置引数として受け入れるように boost::program_options を取得するにはどうすればよいですか? 以下は機能しません。
引数として与えた場合、 (予想どおり)foo bar
何も得られませんが、引数として与えた場合 (および が見つかると予想される場合) も得られます。ここでは、引数名として空の文字列を持つ長い引数であると想定しています。代わりに、引数名として短い引数として解釈されることになっている場合、どうすればそれを指定できますか? 引数の指定を から に変更しても、私が見る限り、結果には影響しません。final_args
-- foo bar
final_args[0] == "foo"
final_args[1] == "bar"
--
-
""
",-"
--
boost::program_options を正しく処理するにはどうすればよいですか?
編集:これは、Tim Sylvester が提案したことを行うための試みですextra_style_parser
:
"pargs"
次のようにオプションに追加されました。
--
引数リストにa を指定してこれを実行すると、required_option
例外が発生します。po::option
(末尾の引数ごとに for を作成する代わりに、それらをすべてpo::option::original_tokens
1 つにまとめると、同様の結果が得られますpo::option
。)
c++ - boost::program_options zero_token を持つ値のベクトル
次の構文をboost::program_optionsで解析しようとしています:
これまでの私のプログラム:
これは e) に対してのみ機能します。それを次のように変更すると:
a) および e) で機能します。と
a)、b) および e) で機能します。
上記のすべてのケースを解析するにはどうすればよいですか?
値のベクトルと zero_tokens() の組み合わせが必要だと思いますが、それを機能させることができないようです。
c++ - boost::program_options での欠落/間違ったキーの処理の改善
次のような呼び出しが失敗したときに、どのキーが関係していたかを知る方法はありますか?
キーがマップにない場合、または int に変換できない場合は、かなり情報に乏しい bad_any_cast が返され、次のいずれかを知ることができません。
- 関係する鍵
- 保存された値、またはそこにある場合でも。
- 関与するタイプ
ブーストヘッダーを変更したり、上記へのすべての呼び出しを try..catch ブロックにラップしたりする必要のない解決策は見つかりません。これは一般的な問題だと思うので、他の誰かがより良いアプローチを知っているかもしれません。