提升程序选项 - 如何有条件地键入位置args?

时间:2012-04-30 04:48:21

标签: c++ boost boost-program-options

我正在使用boost程序选项,我想根据用户指定的命令行开关将一些位置参数解释为字符串或整数。例如:

foo -asint outputfile 10 11 12
foo -asstr outputfile 10 11 12

将(10,11,12)列为第一个示例中的int和第二个中的字符串。

我无法弄清楚如何使用boost po来做到这一点。这是我的命令行解析的片段:

// basic options group
po::options_description genericOpts("allowed options");
genericOpts.add_options()
    ("help,h", "display help message / usage")
    ("asint,i", "interpret arguments ints instead of strings")
;

// hidden options group - don't show in help
po::options_description hiddenOpts("hidden options");
hiddenOpts.add_options()
    ("filename", po::value<string>()->required(),"output file")
    ("inputs", po::value<vector<string>>(), "inputs, either strings or ints")
;

po::options_description cmdline_options;
cmdline_options.add(genericOpts).add(hiddenOpts);

po::positional_options_description p;
p.add("filename",1).add("inputs", -1);

po::variables_map vm;
po::store(po::command_line_parser(argc, argv).
          options(cmdline_options).positional(p).run(), vm);

1 个答案:

答案 0 :(得分:1)

始终将它们作为字符串读取,并根据其他选项进行一些后处理。