2016-08-29 60 views
2

我想使用Boost program_options来解析我的程序输入。一般来说,文档提供了解析所需的信息。但是,我想让我的程序在没有提供输入时打印使用说明,我似乎无法弄清楚。似乎没有“默认”选项,我也找不到如何计算提供的输入数量(测试)。Boost :: program_options - 如果没有输入提供的打印用法

这是我的代码的时刻:

boost::program_options::options_description help("Usage"); 
help.add_options() 
    ("help", "print help info"); 

boost::program_options::options_description req("Required inputs"); 
req.add_options() 
    ("root", boost::program_options::value<std::string>(&images_root), "Root directory") 

boost::program_options::options_description opt("Option inputs"); 
opt.add_options() 
    ("verbose", boost::program_options::value<bool>(&verbose)->implicit_value(1), "Verbose"); 

boost::program_options::variables_map vm; 
boost::program_options::store(boost::program_options::parse_command_line(argc, argv, all), vm); 
if (vm.count("help")) 
{ 
    std::cout << help; 
    return 1; 
} 

boost::program_options::notify(vm); 

我怎么能生产出以下(即,如果没有输入做std::cout << help)?

./test-file 
>> print help info 
+0

如何自定义的验证功能? – Shravan40

回答

1

您可以用argc

例如做到这一点:

int main(int argc, char** argv) 
{ 
    if(argc <= 1) 
     std::cout << "Print Usage\n"; 

    return 0; 
} 
+0

我同意@Roby。在这种情况下,只需将if(vm.count(“help”))'改为if(vm.count(“help”)||(argc == 0))' – kenba

+0

@kenba,你错了。 0参数是程序名本身(即如果没有解析参数,argh是1) – Roby

+1

对不起@Roby,所以它变成了'if(vm.count(“help”)||(argc <= 1))'而不是。顺便说一句,它通常是'int main(int argc,char ** argv)'而不是两个'argc' ... – kenba

相关问题