12

正または負の値を持つ複数の引数を渡したいのですが。それを解析することは可能ですか?

現在、次の初期化があります。

vector<int> IDlist;
namespace po = boost::program_options;     
po::options_description commands("Allowed options");
            commands.add_options()              
                ("IDlist",po::value< vector<int> >(&IDlist)->multitoken(), "Which IDs to trace: ex. --IDlist=0 1 200 -2")
                ("help","print help")
                ;

そして私は電話したいと思います:

./test_ids.x --IDlist=0 1 200 -2
unknown option -2

したがって、program_optionsは、別のオプションとして-2を渡すことを前提としています。

負の整数値を受け入れることができるようにprogram_optionsを構成できますか?

アーマンに感謝します。

編集: ところで、私は単純なパーサーでそれを解析していました

store(command_line_parser(argc, argv).options(commands).run(), vm);

、しかし解決策は拡張されたものを使用することでした:

parse_command_line
4

3 に答える 3

13

「-2」は試しましたか?

編集:引用はうまくいかないようですが、コマンドラインスタイルを変更するとうまくいきます:

char* v[] = {"name","--IDlist=0","1","200","-2"};
int c = 5;

std::vector<int> IDlist;

namespace po = boost::program_options;     
po::options_description commands("Allowed options");
commands.add_options()              
    ("IDlist",po::value< std::vector<int> >(&IDlist)->multitoken(), "Which IDs to trace: ex. --IDlist=0 1 200 -2")
    ("help","print help")
;

po::variables_map vm;
po::store(parse_command_line(c, v, commands, po::command_line_style::unix_style ^ po::command_line_style::allow_short), vm);
po::notify(vm);

BOOST_FOREACH(int id, IDlist)
    std::cout << id << std::endl;
于 2010-03-29T15:34:52.350 に答える
9

注:これは、受け入れられた解決策に対するコメントです。

短いオプションを無効にすることが重要です。kloffyによって提案された上記の解決策はうまく機能しますが、たまたま使用した場合positional_option_description(たとえば、 のようなオプションを使用せずにパラメーターを解析する場合ls file.txt instead of ls --file=file.txt)、 を使用してコードを変換するのに苦労する可能性がありますparse_command_line

ただし、短いオプションを無効にして、次のbasic_command_line_parserように使用し続けることもできます。

交換

store(command_line_parser(argc, argv).options(commands).run(), vm);

store(command_line_parser(argc, argv).options(commands).style(
po::command_line_style::unix_style ^ po::command_line_style::allow_short
).run(), vm);
于 2013-05-14T20:15:11.390 に答える
-1

--IDlist "0、1、200、-2"または--IDlist = "0、1、200、-2"を試してみてください

于 2010-06-22T23:08:48.710 に答える