Ответ 1
Вы должны начать с нескольких учебных пособий [1] [2], чтобы понять, как работает boost::program_options
.
Затем вы можете определить два взаимоисключающих параметра, просто определяя небольшую функцию, как описано в real.cpp. Например, вы можете указать две конфликтующие (или зависящие) опции, определяющие функцию conflicting_options()
:
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 + "'.");
}
}
а затем вызов
conflicting_options (vm, "quiet", "verbose");
сразу после boost::program_options::store()
Я все еще не понимаю, возможно ли определить два взаимоисключающих позиционных параметра, но это должен быть другой вопрос.