我们用boost
的命令行库program_options
解析命令行,在解释布尔命令行时使用下面代码:
using bpo = boost::program_options;
bpo::options_description options;
bool not_ignore;
options.add_options()("i,ignore",
bpo::bool_switch(¬_ignore)->default_value(true),
"设置后将忽略xxx");
在运行时发现效果非预期,当设置命令--ignore
时,not_ignore
变量仍然为true
。查了一下文档才发现bool_switch
的作用是:
if the option is present on the command line, the value will be 'true'.
也就是说它的作用根本不是switch_bool
,而是set_to_true
。这个函数名有很大的歧义,用的时候需要留意。
Q. E. D.