Кажется, есть проблема с выполнением boost :: program_options для option_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()
. Также похоже, что program_options не выполняет полное совпадение командной строки, поэтому даже если вы введете подстроку опции, она будет рассматривать ее как допустимую без выполнения полного сравнения строк. Если это функция boost :: program_options, есть ли способ заставить ее выполнять точное сопоставление строк, а не сопоставлять подстроки? (Я использую Boost версии 1.42)