这就是问题所在。为什么我要使用implicit_value 而不是default_value,反之亦然?
谢谢!
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
在命令行选项的短选项中使用 then ,用户必须在选项之后立即指定值:
./a.out -w80 # implicit_value not used
./a.out -w 80 # wrong: 80 parsed as extra arg if implicit_value is defined
这是一个例子
desc.add_options()
("help", "produce help message")
("optimization", po::value<int>(&opt)->default_value(10),
"optimization level")
("verbose,v", po::value<int>()->implicit_value(1),
"enable verbosity (optionally specify level)")
("listen,l", po::value<int>(&portnum)->implicit_value(1001)
->default_value(0,"no"),
"listen on a port.")
("include-path,I", po::value< vector<string> >(),
"include path")
("input-file", po::value< vector<string> >(), "input file")
;
如果您不输入优化或收听,
./myApp.exe
输出:
Optimization level is 10
Listen port is 0
如果您输入--optimization
没有参数的选项,它将丢失参数。如果你--listen
不带参数输入,它会给出一个隐含的值 1001。
如果我没记错的话,差异出现在一个允许类似-X=Y
(例如,“Y”可能是一个数字)的选项上。默认值是用户没有-X
在命令行上输入 a 时得到的值。如果用户-X
在命令行上输入而没有指定值,那么您会得到一个隐式值。
例如,考虑 gcc,它支持从 0 到 3 (IIRC) 的优化级别。如果您根本不指定-O
,则默认为-O0
(即关闭优化)。如果您指定-O
(没有数字),您将获得隐式值,相当于-O1
. 您也可以-O1
显式指定,也可以指定-O2
或-O3
。