Das ist die Frage. Warum sollte ich den impliziten Wert gegenüber dem Standardwert und umgekehrt verwenden?Was ist der Unterschied zwischen default_value und implicit_value in boost :: program_options?
Danke!
Das ist die Frage. Warum sollte ich den impliziten Wert gegenüber dem Standardwert und umgekehrt verwenden?Was ist der Unterschied zwischen default_value und implicit_value in boost :: program_options?
Danke!
Wenn ich mich recht erinnere, entsteht der Unterschied mit einer Option, die etwas wie -X=Y
erlaubt (wobei "Y" beispielsweise eine Zahl sein könnte). Der Standardwert ist, was Sie erhalten, wenn der Benutzer -X
in der Befehlszeile nicht eingegeben hat. Ein impliziter Wert wird erhalten, wenn der Benutzer in der Befehlszeile -X
eingibt, ohne einen Wert anzugeben.
Betrachten Sie beispielsweise gcc, das Optimierungsstufen von 0 bis 3 (IIRC) unterstützt. Wenn Sie -O
überhaupt nicht angeben, wird standardmäßig -O0
angegeben (d. H. Die Optimierung ist deaktiviert). Wenn Sie -O
(ohne Nummer) angeben, erhalten Sie den impliziten Wert, der -O1
entspricht. Sie können auch explizit -O1
angeben, oder Sie können -O2
oder -O3
angeben.
default_value()
ist der Wert, der in der variables_map
gesetzt werden, wenn der Nutzer nicht einen anderen Wert angegeben haben:
./a.out # implies width=75 if that's the default_value for width
./a.out --width=80 # default_value not used
implicit_value()
ist der Wert, der verwendet wird, wenn der Benutzer die Option gibt, aber ohne ein benachbartes Wert.
./a.out --width # implies width=75 if that's the implicit_value for width
./a.out --width=80 # implicit value not used
Wenn Sie implicit_value
verwenden dann in dem Benutzer kurze Optionen der Kommandozeilen-Optionen muß den Wert sofort nach der Option angeben:
./a.out -w80 # implicit_value not used
./a.out -w 80 # wrong: 80 parsed as extra arg if implicit_value is defined
Es muss nicht unbedingt darüber nachdenken, was der Benutzer auf der Kommandozeile angegeben. Boost's program_options verwendet 'options_descriptor' für alle seine Parser. Wenn also beispielsweise der Wert in einer Konfigurationsdatei oder einer Umgebungsvariablen angegeben wird, wird die Bibliothek nicht auf den' Default_Wert' zurückgreifen. – wilhelmtell
@WilhelmTell: Ganz richtig. –