【发布时间】:2015-11-15 23:36:21
【问题描述】:
使用程序选项,我正在检查参数的有效组合。但由于某种原因,gpu 参数是一个布尔值,无论我在命令行上是否将其设置为 false,它始终为 true。如果我在命令行上指定了 gpu 选项,有没有办法让它为假?我希望能够创建一个 bool 变量来表示是否使用了命令行上的选项。
我也找不到关于 variables_map 的 count() 的任何文档。是 std::map 函数吗?
部分代码:
namespace po = boost::program_options;
po::options_description desc("Allowed Options");
desc.add_options()
("help,h", "Produce help message")
("remove_database,r",po::value<std::vector<std::string>>
(&remove_database),
"Remove a pre-built database, provide a name(s) of the database")
("gpu,u", po::bool_switch()->default_value(false),
"Use GPU? Only for specific algorithms");
po::variables_map vm;
po::store(po::parse_command_line(argc,argv,desc),vm);
po::notify(vm);
//Processing Cmd Args
bool help = vm.count("help");
bool remove = vm.count("remove_database");
bool gpu = vm.count("gpu");
test(help,"help");
test(remove, "remove");
test(gpu, "gpu");
.....
void test(bool var1, std::string var2){
if(var1)
std::cout << var2 << " is active " << std::endl;
else
std::cout << var2 << " is not active " << std::endl;
输出:
$./a.out -r xx -u off
remove is active
gpu is active
$./a.out -r xx -u false
remove is active
gpu is active
【问题讨论】:
-
bool_switchdocs:“与 'value' 函数的工作方式相同,但创建的 value_semantic 不会接受任何显式值。因此,如果该选项存在于命令中行,值将是 'true'。"
标签: c++ boost boost-program-options