我正在尝试使用 boost::program_options 解析以下语法:
a)
$ a.out
verbosity: 0
b)
$ a.out -v
verbosity: 1
c)
$ a.out -v -v
verbosity: 2
d)
$ a.out -vv
verbosity: 2
e) (optional)
$ a.out -v3
verbosity: 3
到目前为止我的程序:
#include <iostream>
#include <boost/program_options.hpp>
namespace po = boost::program_options;
int main(int argc, char *argv[])
{
po::options_description desc;
desc.add_options()
("verbose,v", po::value<int>(), "verbose");
po::variables_map vm;
po::store(po::command_line_parser(argc, argv).options(desc).run(), vm);
po::notify(vm);
std::cout << "verbosity: " << vm["verbose"].as<int>() << std::endl;
return 0;
}
这仅适用于 e)。如果我将其更改为:
po::value<int>()->default_value(0)
它适用于 a) 和 e)。和
po::value<int>()->default_value(0)->implicit_value(1)
它适用于 a)、b) 和 e)。
我怎样才能让它解析所有上述情况?
我想我需要一个值向量与 zero_tokens() 的某种组合,但我似乎无法让它工作。