7

私は次のようなboost::program_optionsを使用しています:

namespace po = boost::program_options;
po::options_description desc("Options");
desc.add_options()
  ("help,?", "Show Options")
  ("capture-file,I", po::value<string>(), "Capture File")   
  ("capture-format,F", po::value<string>()->default_value("pcap"), "Capture File Format")
  ("output-file,O", po::value<string>()->default_value("CONOUT$"), "Output File");

po::variables_map vm;
po::store(po::command_line_parser(ac, av).options(desc)./*positional(pd).*/run(), vm);

コマンドラインパラメータを渡す-I hithereと機能しますが、ブーストを渡すと、 「boost::any_castを使用した変換に失敗しました」のaがスローされ/I hithereます。boost::bad_any_castwhat()

program_optionsを使用して/-delimittedまたは--delimittedオプションのいずれかを解析することは可能ですか?/ボーナスの質問、同じオプションを設定するように構成できます-が、バイナリは互いに反対ですか?たとえば、/verbose詳細なログを意味する場合がありますが、詳細でないログを意味する場合-verboseがあります。

4

1 に答える 1

10

/とを使用するには、 style_tフラグの適切な組み合わせでのメソッドを-使用します。例えば:command_line_parserstyle()

po::store(po::command_line_parser(ac, av)
    .options(desc)
    .style(po::command_line_style::default_style
        | po::command_line_style::case_insensitive
        | po::command_line_style::allow_slash_for_short
        | po::command_line_style::allow_long_disguise)
    /*.positional(pd)*/
    .run(), vm);

(allow_long_disguise長い/オプションを始めましょう。)

独自の追加のパーサー/を追加することで、おそらく-反対のことを行うことができます。ただし、これは非常に標準的ではないため、エンド ユーザーを混乱させる可能性があるため、良いアイデアかどうかはわかりません。

于 2010-05-26T20:44:24.077 に答える