boost :: program_options – 它做一个确切的string匹配的命令行选项?

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()调用更改选项的添加顺序,则输出更改。 此外,它看起来像program_options不会做一个完整的命令string匹配,所以即使你input的选项的子string,它会认为它是一个有效的选项,而不做一个完整的string比较。 如果这是一个boost :: program_optionsfunction,有什么办法强制它做精确的string匹配,而不是做子string匹配? (我正在使用升压版本1.42)

Solutions Collecting From Web of "boost :: program_options – 它做一个确切的string匹配的命令行选项?"

默认情况下,program_option有allow_guessing样式位,所以一个子串匹配就足够了。 你观察到的行为,即一个选项匹配命令行的前缀,即使有一个完全匹配的选项,也是一个错误。 它在1.45固定。

也许你错了。 你的例子很好。 看看我得到的输出:

 [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...