Как использовать boost:: program_options для принятия необязательного флага?

Мне нужно реализовать необязательный флаг, скажем -f/--flag. Поскольку это флаг, связанное значение не имеет. В моем коде мне нужно только знать, был ли установлен флаг или нет. Каков правильный способ сделать это с помощью boost:: program_options?

Ответ 1

Удобный способ сделать это с помощью функции 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
}

Это безопаснее, чем ручная проверка строки (строка используется только один раз во всем определении).

Ответ 2

Используйте его как обычно, но без какого-либо значения:

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
}

Смотрите пример справки по началу работы.