How to use boost::program_options to accept an optional flag?
Asked Answered
C

2

31

I need to implement an optional flag, say -f/--flag. Since this is a flag, there is no value associated. In my code I only need to know whether the flag was set or not. What's the proper way to do this using boost::program_options?

Crossrefer answered 16/5, 2014 at 20:17 Comment(1)
Possible duplicate of boost-program-options: notifier for options with no valueLim
P
44

A convenient way to do this is with the bool_switch functionality:

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
}

This is safer than manually checking for the string (string only used once in whole definition).

Possibility answered 16/5, 2014 at 21:19 Comment(2)
Centos 7.4, boost 1.53, aarch64. flag is always false, vm.count("flag") is always 1 despite any options change.The method below without bool_switch is correctly working with vm.count.Headwater
The option below will accept a parameter. For example the command line "... -f 42" will take '42' as a value. The 42 could represent some other positional. See: bool_switch always true.Hapte
W
11

Use it as usual but without any value:

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
}

See the Getting Started option help as an example.

Wherever answered 16/5, 2014 at 20:26 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.