Наборы взаимоисключающих опций в опциях программы 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()
Я до сих пор не понимаю, возможно ли определить два взаимоисключающих позиционных варианта, но это должен быть другой вопрос.