Подтвердить что ты не робот

В чем разница между default_value и implicit_value в boost:: program_options?

Это вопрос. Почему я должен использовать implicit_value по умолчанию_value и наоборот?

Спасибо!

4b9b3361

Ответ 1

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

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

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

./a.out --width     # implies width=75 if that 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

Ответ 2

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

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