Bar*_*rry 5 c++ boost boost-program-options
使用bool_switch,我可以编写一个命令行选项来打开一个标志:
bool flag;
po::options_description options;
options.add_options()
("on", po::bool_switch(&flag)->default_value(false))
;
Run Code Online (Sandbox Code Playgroud)
哪里现在./a.out将有flag==false和./a.out --on将有flag==true。但是,对于被明确的目的,我会像另外添加一个命令行选项来把标志关闭。就像是:
options.add_options()
("on", po::bool_switch(&flag)->default_value(false))
("off", po::anti_bool_switch(&flag)) // ????
;
Run Code Online (Sandbox Code Playgroud)
有没有办法anti_bool_switch在 program_options 库中做,或者我基本上必须编写代理 bool 引用?
我能想到的一件事(不确定这是否是最好的方法)是使用implicit_value():
po::typed_value<bool>* store_bool(bool* flag, bool store_as)
{
return po::value(flag)->implicit_value(store_as)->zero_tokens();
}
Run Code Online (Sandbox Code Playgroud)
value必须使用所需的默认值进行初始化,否则这将满足所需的功能:
bool value = false;
options.add_options()
("on", store_bool(&value, true))
("off", store_bool(&value, false))
;
Run Code Online (Sandbox Code Playgroud)