我正在尝试以某种方式进行编程,以便程序的用户将程序的详细程度指定为0到3。有人告诉我,可能有一种方法可以设置程序选项,以便我能够来检测标志的出现次数,然后相应地运行我的程序。
例:[none] -> level 0
-v -> level 1
-vv -> level 2
-vvv -> level 3
有人知道这是否可能吗?我是否只需要设置三个不同的选项,每种可能性一个?我试图寻找一个类似的例子,但是我担心我可能会搜索错误的东西。
最佳答案
我想不出一个好方法。 boost::program_options
选项语法比getopt
更加结构化(并且可能更简单)。
这是一种方法:
#include <boost/program_options.hpp>
#include <iostream>
#include <algorithm>
#include <cstdlib>
int main(int argc, char**argv)
{
namespace po = boost::program_options;
std::string verbosity_values;
po::options_description desc("Command Line Options");
desc.add_options()("verbosity,v",
po::value(&verbosity_values)->implicit_value(""),
"verbose");
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);
if (vm.count("verbosity")) {
verbosity_values += "v";
}
if (std::any_of(begin(verbosity_values), end(verbosity_values), [](auto&c) { return c != 'v'; })) {
std::cerr << "invalid verbosity" << std::endl;
std::exit(100);
}
std::cout << "verbosity: " << verbosity_values.size() << std::endl;
}
这个怎么运作:
variables_map
包含“verbosity”自变量,则必须在命令行上提及-v或--verbosity。因此,在字符串中添加“v”。 例:
$ ./a.out -vvvv
verbosity: 4
$
关于c++ - boost 程序选项计数标志出现的次数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38247963/