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.