这就是问题所在。为什么我会在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