3

次のプログラムがあります。

#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. これらの最後のオプションはエラーをスローするべきではありませんか?

4

1 に答える 1

5

部分一致を受け入れるのはdefault_styleforのようですboost::option

Boost サイトの回答によるとhttp://lists.boost.org/boost-users/2007/02/25861.php

このデフォルトは、追加のパラメータを に渡すことにより、完全一致を要求するように変更できますparse_command_line

OPによる編集:実際にはparse_command_line、より一般的な(スタイルの変更を許可する)を使用する必要があったため、行を次の行にcommand_line_parser置き換えました。store(...

store(command_line_parser(argc, argv).options(cmd_line).style(command_line_style::default_style & ~command_line_style::allow_guessing).run(), vm);
于 2012-04-17T11:04:55.000 に答える