提升::P设置选项无法使所有参数都处于位置状态



以下是使用boost::program_options的代码。

#include <iostream>
#include <vector>
#include <boost/program_options.hpp>
int main (int argc, char* argv[]) {
int n;
std::string mps_name;
boost::program_options::options_description desc("options");
desc.add_options()
("file", boost::program_options::value<std::string>(&mps_name)->required(),
"input file")
(",n", boost::program_options::value<int>(&n)->required(),
"number")
("help", "this help message")
;
boost::program_options::positional_options_description p;
p.add("file", 1);
p.add(",n", 1);
boost::program_options::variables_map vm;
try {
boost::program_options::store(boost::program_options::command_line_parser(argc, argv).
options(desc).positional(p).run(), vm);
if (vm.count("help") || argc == 1) {
std::cout << "usage: " << argv[0] << " [options]" << std::endl;
std::cout << desc;
return -1;
}
boost::program_options::notify(vm);
}
catch (std::exception& e) {
std::cout << e.what() << std::endl;
return -1;
}
std::cout << "command line arguments parsed" << std::endl;
return 0;
} // main

当代码执行时,所有参数都作为位置参数。boost抛出异常unrecognised option '5'。 使用./a.out earth 5执行代码时

代码在使用命令./a.out --file earth -n 5执行时完美运行

问题是位置仅通过长名称对应于选项描述。这是一个工作版本:

boost::program_options::options_description desc("options");
desc.add_options()
("file", boost::program_options::value<std::string>(&mps_name)->required(), "input file")
("n,n", boost::program_options::value<int>(&n)->required(), "number")
("help", "this help message")
;
boost::program_options::positional_options_description p;
p.add("file", 1);
p.add("n", 1);

住在科里鲁

指纹

./a.out ltuae 42
command line arguments parsed: ltuae 42

最新更新