Я пытаюсь разобрать следующий синтаксис с 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)
, это будет работать для а) и е).С
po::value<int>()->default_value(0)->implicit_value(1)
это работает для a), b) и e).
Как я могу получить его для анализа всех вышеупомянутых случаев?
Я думаю, что янужна некоторая комбинация вектора значений с zero_tokens (), но я не могу заставить его работать.