我正在尝试以某种方式进行编程,以便程序的用户将程序的详细程度指定为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;

}

这个怎么运作:
  • 定义一个选项“--verbosity”,其同义词为“-v”。
  • 'verbosity'采用字符串参数,我们默认为“”
  • 我们检查字符串是否仅包含'v'的
  • 如果variables_map包含“verbosity”自变量,则必须在命令行上提及-v或--verbosity。因此,在字符串中添加“v”。
  • 详细程度是字符串的长度。

  • 例:
    $ ./a.out -vvvv
    verbosity: 4
    $
    

    关于c++ - boost 程序选项计数标志出现的次数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38247963/

    10-13 08:38
    查看更多