5

boost::program_optionsのoptions_descriptionマッチングが行われる方法に問題があるようです。

int main(int argc, char* argv[])
{
    boost::program_options::options_description desc("CmdLine utility");
    desc.add_options()
        ("hel", "hel message")
        ("help", "produce help message")
        ("helps","helps message")       
    ;
    boost::program_options::variables_map vm;
    boost::program_options::store(boost::program_options::parse_command_line(argc, argv,desc), vm);
    boost::program_options::notify(vm);

    if(vm.count("help")) {
        std::cout << desc << std::endl;
    }
    if(vm.count("helps")) {
        std::cout << "helps..." << std::endl;
    }
    if(vm.count("hel")) {
        std::cout << "hel..." << std::endl;
    }
    return 0;
}

出力-

C:\code>cmd.exe --helps
helps...
C:\code>cmd.exe --help
helps...
C:\code>cmd.exe --hel
helps...

add_options()callを使用してオプションを追加する順序を変更すると、出力が変わります。また、program_optionsは完全なコマンド文字列照合を行わないように見えるため、オプションのサブ文字列を入力しても、完全な文字列比較を行わなくても、それは有効なオプションと見なされます。これがboost::program_options機能である場合、サブストリングマッチングではなく、正確なストリングマッチングを強制する方法はありますか?(私はBoostバージョン1.42を使用しています)

4

2 に答える 2

4

デフォルトでは、program_optionのallow_guessingスタイルビットがオンになっているため、部分文字列の一致で十分です。完全に一致する別のオプションがある場合でも、オプションがコマンドラインのプレフィックスと一致するという観察された動作はバグです。1.45で修正されました。

于 2010-11-22T11:33:32.127 に答える
0

多分あなたは間違って電話をしました。あなたの例は大丈夫です。私が得た出力を見てください:

[vladimir@asa example]$ ./a.out --help
CmdLine utility:
  --hel                 hel message
  --help                produce help message
  --helps               helps message

[vladimir@asa example]$ ./a.out --hel
hel...
[vladimir@asa example]$ ./a.out --helps
helps...
于 2010-11-16T18:20:40.127 に答える