相关疑难解决方法(0)

boost-program-options:没有值的选项的通知程序

只有在具有value_semantic的情况下,才能将通知程序用于解析选项.给定通知程序自动处理无值选项的最佳方法是什么?

简单的方法是使用隐式赋值创建一个虚拟value_semantic,这样用户就可以传递没有值的选项.这导致明确提供值的可能性.如果提供了值,则可以添加运行时检查并抛出错误.

更新:但是,这在位置选项存在的情况下不起作用,因为位置选项的值可以遵循无值选项,将异常作为给定值给出它.

c++ boost-program-options

24
推荐指数
2
解决办法
1万
查看次数

Boost程序选项bool始终为True

使用程序选项,我正在检查有效的参数组合.但由于某种原因,gpu参数是一个bool,无论我是否在命令行上将其设置为false,它总是正确的.如果我在命令行中指定了gpu选项,有没有办法可以为false?我希望能够创建一个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 …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-program-options

5
推荐指数
1
解决办法
2502
查看次数

标签 统计

boost-program-options ×2

c++ ×2

boost ×1