haben muss wie ich gerade festgestellt haben, können Sie zwei sich gegenseitig ausschließende Optionen definieren können einfach definieren eine kleine Funktion wie in real.cpp erläutert. Zum Beispiel können Sie zwei widersprüchliche Optionen angeben, die eine conflicting_options()
Funktion:
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 + "'.");
}
}
und dann
conflicting_options (vm, "quiet", "verbose");
direkt nach boost::program_options::store()
Überprüfung Aufruf, dass --myoption
gleich zu myvalue1
oder myvalue2
dann einfach wird eine Frage eines Funktionsaufrufs.
Ich verstehe immer noch nicht, wenn es möglich ist, zwei sich gegenseitig ausschließende Positionsoptionen zu definieren, aber das sollte eine andere Frage sein.
Würde dies nicht nur Strings vergleichen? Angenommen sie sind beide "std :: string", könnten Sie 'if ((arg == myvalue1) || (arg == myvalue2))' 'machen. –
sicher, es funktioniert, aber ich brauche etwas mehr integriert in 'Programm-Optionen' (zum Beispiel kann es die Hilfemeldung ändern), zum Beispiel mit Nicht-String arbeiten –
Sie möchten mehr über das, was Sie tun möchten, zu erklären, Es ist unklar. –