使用 boost program_options 期望提供的 CLI 参数的特定顺序

问题描述 投票:0回答:0

假设我们有以下 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 }

c++ command-line-interface boost-program-options
© www.soinside.com 2019 - 2024. All rights reserved.