提升程序选项计数标志的出现次数
boost program options count number of occurrences of a flag
我正在尝试为我的程序用户指定程序的详细程度从 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's
- 如果
variables_map
包含"详细"参数,则必须在命令行中提及 -v 或 --verbosity。因此,在字符串中添加"v"。 - 详细程度是字符串的长度。
例:
$ ./a.out -vvvv
verbosity: 4
$
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 每次使用带有LOCK_EX标志的LOCK_NB时,相同的程序/进程都会获取锁
- C 中的多线程程序:在标志变量上使用Mutex
- 当我制作这个程序时,标志会被调用吗?
- STM32L011:无法在中断处理程序中清除中断标志
- 在命令行程序中使用布尔值。找不到定义标志并检查它们是否在参数中的方法
- 很难在我的C 程序中激活我的命令标志
- 如何在具有 WppEnabled 标志的用户模式应用程序中使用 WPP 跟踪
- 编译器在程序集中优化代码时会做什么?即O2标志
- 在信号处理程序中设置标志
- 设置了LARGEADDRESSAWARE标志的应用程序获得较少的虚拟内存
- 使用-g gcc标志编译的程序比不使用-g编译的程序慢
- 在多线程应用程序中为注入的mprotect调用切换标志
- 某个程序的堆栈内存有多大,是否有任何编译器标志可以设置它
- 捕获程序中的C++0x标志
- C++程序标志
- 如何最好地防止库(源)和应用程序(头)编译之间的(编译器)标志不匹配
- 提升程序选项计数标志的出现次数
- SetThreadExecutionState with ES_CONTINUOUS -如果应用程序在重置标志之前崩溃会