My program (prog.exe
) supports the following four flags: -P
, -p
, -b
and -s
. However:
-b
and -p
must be specified together, constitute a set, and have numeric values e.g. -b 42
-s
cannot be specified with the above set, and vice versa-P
is mandatory in both casesAs such prog.exe
can only be run as either
prog.exe -P -s
or
prog.exe -P -b -42 -p 8
Is there a way to specify the above sets of mutually exclusive command line options in boost program options?
You should start with a few tutorials [1][2] to understand how boost::program_options
works.
Then, you can define two mutually exclusive options simply defining a small function as explained in real.cpp. For example, you can specify two conflicting (or depending) options defining a conflicting_options()
function:
void conflicting_options(const boost::program_options::variables_map & vm,
const std::string & opt1, const std::string & opt2)
{
if (vm.count(opt1) && !vm[opt1].defaulted() &&
vm.count(opt2) && !vm[opt2].defaulted())
{
throw std::logic_error(std::string("Conflicting options '") +
opt1 + "' and '" + opt2 + "'.");
}
}
and then calling
conflicting_options (vm, "quiet", "verbose");
right after boost::program_options::store()
I still don't understand if it's possible to define two mutually exclusive positional options, but that should be another question.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With