我有以下程序:
#include <boost/program_options.hpp>
bool check_options(int argc, char** argv)
{
using namespace boost::program_options;
variables_map vm;
// Command line options
std::string cfg_file_name;
options_description cmd_line("Allowed options");
cmd_line.add_options()
("help", "produce this help message")
;
store(parse_command_line(argc, argv, cmd_line), vm);
notify(vm);
if(vm.count("help"))
{
std::cout << cmd_line << std::endl;
return false;
}
return true;
}
int main(int argc, char** argv)
{
if(!check_options(argc, argv))
return 1;
return 0;
}
当我使用./myprg --help
运行时,我得到了我期望的结果:
Allowed options:
--help produce this help message
但即使我运行./myprg --h
或./myprg --he
或./myprg --hel
,我也会得到相同的结果。那些最后的选项不应该抛出错误吗?
答案 0 :(得分:4)
似乎接受部分匹配是default_style
的{{1}}。
根据Boost网站的答案http://lists.boost.org/boost-users/2007/02/25861.php
通过将额外参数传递给boost::option
,可以将此默认值更改为需要完全匹配。
OP编辑:
实际上,而不是parse_command_line
我必须使用更通用的parse_command_line
(允许样式更改),从而用这一行替换command_line_parser
行:
store(...