Наборы взаимоисключающих опций в опциях программы 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?

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()

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

Другие вопросы по тегам