假设我们有以下 boost::program_options-specific 选项描述:
po::options_description main_desc("Usage: my_app [--version] OBJECT { COMMAND | --help }\n"
"OBJECT := { pizza | pasta | drink }\n"
"OPTIONS");
// clang-format off
main_desc.add_options()
("version,v", "Prints the version of the app.")
("help,h", "Prints usage information.");
// clang-format on
和下面的解析相关代码
variables_map main_vm;
po::parsed_options main_parsed_opt = po::command_line_parser(argc, argv)
.options(main_desc)
.allow_unregistered()
.run();
store(main_parsed_opt, main_vm);
if (main_vm.count("version")) {
std::cout << "my_app v0.0.1 << std::endl;
return 0;
}
问题是:如何检查“--version”选项是否作为第一个参数传递,以便不支持以下调用:
./my_app pizza add --version
我在这里寻找类似的东西:
if (main_vm.count("version") && main_vm.position("version") == 1) {
std::cout << "my_app v0.0.1 << std::endl";
return 0;
}
我想确保,如果提供了选项
--version
,它会作为第一个参数提供,如命令行语义所示
my_app [--version] OBJECT { COMMAND | --help }