如何使用boost :: program_options接受可选标志?

bec*_*cko 17 c++ boost boost-program-options

我需要实现一个可选的标志,比如-f/ --flag.由于这是一个标志,因此没有关联的值.在我的代码中,我只需要知道标志是否已设置.使用boost :: program_options执行此操作的正确方法是什么?

ssh*_*nin 29

一种方便的方法是使用以下bool_switch功能:

bool flag = false;

namespace po = boost::program_options;

po::options_description desc("options");

desc.add_options()
  ("flag,f", po::bool_switch(&flag), "description");
po::variables_map vm;
//store & notify

if (flag) {
  // do stuff
}
Run Code Online (Sandbox Code Playgroud)

这比手动检查字符串更安全(字符串仅在整个定义中使用一次).

  • Centos 7.4、Boost 1.53、aarch64。flag 始终为 false,尽管选项发生任何更改,vm.count("flag") 始终为 1。下面没有 bool_switch 的方法可以正确使用 vm.count。 (2认同)

use*_*087 6

像往常一样使用但没有价值:

boost::program_options::options_description od("allowed options");
od.add_options()
    ("flag,f", "description");

po::variables_map vm;
// store/ notify vm
if (vm.count("flag")) {
    // flag is set
}
Run Code Online (Sandbox Code Playgroud)

例如,请参阅" 入门"选项帮助.