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を使用しています)