Наборы взаимоисключающих опций в опциях программы Boost

Моя программа (prog.exe) поддерживает следующие четыре флага: -P, -p , -b а также -s, Тем не мение:

  • -b а также -p должны быть указаны вместе, составлять набор и иметь числовые значения, например -b 42
  • -s не может быть указан с указанным выше набором, и наоборот
  • -P является обязательным в обоих случаях

В качестве таких prog.exe может быть запущен только как

prog.exe -P -s

или же

prog.exe -P -b -42 -p 8

Есть ли способ указать вышеупомянутые наборы взаимоисключающих параметров командной строки в параметрах программы boost?

17

Решение

Вы должны начать с нескольких уроков [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()

Я до сих пор не понимаю, возможно ли определить два взаимоисключающих позиционных варианта, но это должен быть другой вопрос.

19

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector