次の構文を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() の組み合わせが必要だと思いますが、それを機能させることができないようです。