這就是問題所在。爲什麼我會在default_value上使用implicit_value,反之亦然?boost :: program_options中的default_value和implicit_value有什麼區別?
謝謝!
這就是問題所在。爲什麼我會在default_value上使用implicit_value,反之亦然?boost :: program_options中的default_value和implicit_value有什麼區別?
謝謝!
如果我沒記錯的話,區別與允許類似-X=Y
一個選項出現(其中「Y」可能是,例如,一個數字)。如果用戶沒有在命令行中輸入-X
,則會得到默認值。如果用戶在命令行上輸入-X
而沒有指定值,則會得到一個隱含值。
考慮,例如,GCC,它支持優化級別從0到3(這個)。如果您根本沒有指定-O
,則默認爲-O0
(即優化已關閉)。如果您指定-O
(沒有數字),則會得到隱含值,相當於-O1
。您也可以明確指定-O1
,或者您可以指定-O2
或-O3
。
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
它不一定反映在命令行上指定哪些用戶上。 Boost的program_options對所有解析器都使用'options_descriptor',所以如果例如在配置文件或環境變量中指定該值,則該庫不會回退到'default_value'。 – wilhelmtell 2010-05-13 20:35:04
@WilhelmTell:的確如此。 – 2010-05-13 21:42:10