В чем разница между default_value и implicit_value в boost :: program_options? - PullRequest
27 голосов
/ 13 мая 2010

Вот в чем вопрос. Зачем мне использовать implicit_value вместо default_value и наоборот?

Спасибо!

Ответы [ 2 ]

39 голосов
/ 14 мая 2010

default_value() - это значение, которое будет введено в variables_map, если пользователь не указал другое значение:

./a.out             # implies width=75 if that's the default_value for width
./a.out --width=80  # default_value not used

implicit_value() - это значение, которое будет использоваться, если пользователь указывает опцию, но без смежного значения.

./a.out --width     # implies width=75 if that's the implicit_value for width
./a.out --width=80  # implicit value not used

Если вы используете implicit_value, то в коротких опциях командной строки пользовательнеобходимо указать значение сразу после параметра:

./a.out -w80   # implicit_value not used
./a.out -w 80  # wrong: 80 parsed as extra arg if implicit_value is defined
0 голосов
/ 14 мая 2010

Если я правильно помню, разница возникает с опцией, которая допускает что-то вроде -X=Y (где «Y» может быть, например, число). Значение по умолчанию - это то, что вы получаете, если пользователь не ввел -X в командной строке. Неявное значение - это то, что вы получаете, если пользователь вводит -X в командной строке без указания значения.

Рассмотрим, например, gcc, который поддерживает уровни оптимизации от 0 до 3 (IIRC). Если вы вообще не указываете -O, по умолчанию используется -O0 (т.е. оптимизация отключена). Если вы укажете -O (без номера), вы получите неявное значение, эквивалентное -O1. Вы также можете указать -O1 явно, или вы можете указать -O2 или -O3.

...