resueltos reglas regla probabilidad para mutuamente multiplicacion ley incluyentes excluyentes eventos especial ejercicios ejemplos complementarios adicion c++ command-line-arguments boost-program-options command-line-parsing

c++ - reglas - Conjuntos de opciones mutuamente excluyentes en las opciones del programa boost.



regla especial de la adicion ejemplos (1)

Mi programa ( prog.exe ) admite los siguientes cuatro indicadores: -P , -p , -b y -s . Sin embargo:

  • -b y -p deben especificar juntos, constituyen un conjunto y tienen valores numéricos, por ejemplo, -b 42
  • -s no se puede especificar con el conjunto anterior, y viceversa
  • -P es obligatorio en ambos casos.

Como tal prog.exe solo puede ejecutarse como

prog.exe -P -s

o

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

¿Hay alguna manera de especificar los conjuntos anteriores de opciones de línea de comando mutuamente excluyentes en las opciones de impulso del programa?


Debe comenzar con algunos tutoriales [1] [2] para comprender cómo funciona boost::program_options .

Luego, puede definir dos opciones mutuamente excluyentes simplemente definiendo una función pequeña como se explica en real.cpp . Por ejemplo, puede especificar dos opciones conflictivas (o dependientes) que definen una función 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 + "''."); } }

y luego llamando

conflicting_options (vm, "quiet", "verbose");

justo después de boost::program_options::store()

Todavía no entiendo si es posible definir dos opciones posicionales mutuamente excluyentes, pero esa debería ser otra pregunta.