为什么boost :: program_options接受切碎的单词?

时间:2012-04-17 09:53:38

标签: c++ boost boost-program-options

我有以下程序:

#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,我也会得到相同的结果。那些最后的选项不应该抛出错误吗?

1 个答案:

答案 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(...