gpt4 book ai didi

c++ - boost 程序选项计算标志的出现次数

转载 作者:行者123 更新时间:2023-11-30 05:25:26 26 4
gpt4 key购买 nike

我正在尝试以一种方式让我的程序的用户指定我的程序的冗长级别从 0 到 3。有人告诉我可能有一种方法可以设置程序选项,以便我能够检测到标志出现的次数,然后相应地运行我的程序。

例子:[无] -> 级别 0-v -> 级别 1-vv -> 级别 2-vvv -> 级别 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;

}

工作原理:

  1. 使用同义词“-v”定义名为“--verbosity”的选项。
  2. 'verbosity' 接受一个字符串参数,我们默认为 ""
  3. 我们检查字符串是否只包含'v'
  4. 如果 variables_map 包含“verbosity”参数,则必须在命令行中提及 -v 或 --verbosity。因此,在字符串中添加一个“v”。
  5. 详细程度是字符串的长度。

例子:

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com