以下代码使用po::bool_switch(&flag)
,希望自动为flag
分配正确的值。
我的编译命令是clang++ -std=c++11 test.cpp -o test -lboost_program_options
所以我用./test -h
运行程序,但没有显示帮助信息。
为什么会这样?
#include <iostream>
#include <boost/program_options.hpp>
namespace
{
namespace po = boost::program_options;
}
int main(int ac, char ** av)
{
bool flag;
po::options_description help("Help options");
help.add_options()
( "help,h"
, po::bool_switch(&flag)->default_value(false)
, "produce this help message" );
po::variables_map vm;
po::parsed_options parsed
= po::parse_command_line(ac,av,help);
po::store(po::parse_command_line(ac,av,help),vm);
if (flag)
{
std::cout << help;
}
po::notify(vm);
return 0;
}
答案 0 :(得分:1)
解析并存储参数后,您应该调用notify
。 store
只填写variables_map
的内部数据结构。 notify
发布它们。
您的示例几乎与&#34; 入门部分&#34;在tutorial。
here他们给出了一个非常大胆的警告,不要忘记它:
最后,对notify函数的调用运行用户指定的notify函数,并在需要时将值存储到常规变量中。
警告:强> 在您存储了所有已解析的值之后,不要忘记调用通知功能。
这应该有效:
po::variables_map vm;
po::parsed_options parsed
= po::parse_command_line(ac,av,help);
po::store(po::parse_command_line(ac,av,help),vm);
po::notify(vm); // call after last store, and before accesing parsed variables
if (flag)
{
std::cout << help;
}