典型的 boost program_options的用法如下:

#include <boost/program_options.hpp>

using namespace boost::program_options;
using namespace std; int main(int argc, char* argv[]) // 需要命令行参数
{
int intValue;
options_description opts("Mysql performance options"); //增加两个程序选项
opts.add_options()
("help,h", "help message")
("int", value<string>(&intValue)->default_value(), "a int value") variables_map vm; // 选项存储map容器
store(parse_command_line(argc, argv, opts), vm); //解析参数并存储到vm中 notify(vm); cout << filename << endl;
}

假设编译出的二进制文件为 test,运行 ./test --int 5。如果这时候想传入参数-5,写法应该是 ./test --int -5。由于-5与短参数格式难以分辨(-5也是短参数的格式),这时候程序依旧能够编译通过,但是运行的时候会出现参数使用错误。为了支持值为负数的参数,我们可以禁用短参数。具体做饭为将store()函数的调用改为

store(parse_command_line(argc, argv, opts,
po::command_line_style::unix_style ^ po::command_line_style::allow_short),
vm);

program_options的默认风格为unix_style, 通过 program_options官方文档 可以看到 unix_style是几种 style与的结果,我们只要使用异或的方式就可以把其中某种style去掉。

enum style_t
{
allow_long = ,
allow_short = allow_long << ,
allow_dash_for_short = allow_short << ,
allow_slash_for_short = allow_dash_for_short << ,
long_allow_adjacent = allow_slash_for_short << ,
long_allow_next = long_allow_adjacent << ,
short_allow_adjacent = long_allow_next << ,
short_allow_next = short_allow_adjacent << ,
allow_sticky = short_allow_next << ,
allow_guessing = allow_sticky << ,
case_insensitive = allow_guessing << ,
allow_long_disguise = case_insensitive << ,
unix_style = (allow_short | short_allow_adjacent
| short_allow_next | allow_long
| long_allow_adjacent | long_allow_next
| allow_sticky | allow_guessing
| allow_dash_for_short),
default_style = unix_style };

现在重新编译运行程序,运行 ./test --int -5 就可以正确输出 -5了。

program_options禁止命令行短参数的更多相关文章

  1. mysql命令行各个参数解释

    mysql命令行各个参数解释 http://blog.51yip.com/mysql/1056.html Usage: mysql [OPTIONS] [database]   //命令方式 -?, ...

  2. 在VS中向命令行添加参数的方法

    在VS中向命令行添加参数的方法 在VS中向命令行添加参数,即向main()函数传递参数的方法: 右键单击要 添加参数的工程-->属性-->配置属性-->调试,在右侧“命令参数”栏输入 ...

  3. Shell Scipt 命令行带参数,输出log

    命令行带参数,以及字符串参数放到ssh命令里可以这么放: #!/bin/bash        这行保证运行bash可以这样: ./data.sh if [ $# != 4 ]; then echo ...

  4. 记录一个 spring cloud 配置中心的坑,命令行端口参数无效,被覆盖,编码集问题无法读取文件等.

    spring cloud 配置中心 结合GIT , 可以运行时更新配置文件.发送指令让应用重新读取配置文件. 最近在测试服务器实现了一套,结果CPU 实用率暴增,使用docker compose启动 ...

  5. 命令行传递参数并排序 AS实现加法

    题目:从命令行输入参数并进行排序 1.实验准备 Integer提供了能在 int 类型和 String 类型之间互相转换的方法,还提供了处理 int 类型时非常有用的其他一些常量和方法. static ...

  6. 【VS工程设置】 编译动态库,命令行添加参数,不使用预编译头,指定该项目链接 哪种 运行库

    编译动态库 注意: 动态库: [目标文件扩展] => .dll + [配置类型] => 动态库(.dll) 静态库: [目标文件扩展] => .lib + [ 配置类型]=> ...

  7. FFmpeg命令行map参数选择音视频流

    FFmpeg命令行map参数选择音视频流 介绍 -map参数告诉ffmpeg要从输入源中选择/拷贝哪个stream流到输出,可以从输入源中选择多个音视频流作为输出. 不加-map参数,ffmpeg默认 ...

  8. python命令行获取参数

    python命令行获取参数 import sys # python获取参数 input_file = sys.argv[1] output_file = sys.argv[2] print(input ...

  9. spring boot 项目打包后无法通过命令行传入参数

    java -jar .\tk-provider.jar --spring.profiles.active=test 本想用测试环境的配置文件运行项目可项目启动时一直是使用dev配置文件运行. java ...

随机推荐

  1. 【Android - V】之DrawerLayout的使用

    DrawerLayout是Android V4包中的一个布局控件,用来实现一个抽屉样式的布局. DrawerLayout通过设置子视图的layout_gravity来决定子视图停靠在屏幕的哪个边缘外侧 ...

  2. MySQL 一致性读 深入研究 digdeep博客学习

    http://www.cnblogs.com/digdeep/p/4947694.html 一致性读,又称为快照读.使用的是MVCC机制读取undo中的已经提交的数据.所以它的读取是非阻塞的. 相关文 ...

  3. Qt 学习之路 :Qt Quick Controls

    自 QML 第一次发布已经过去一年多的时间,但在企业应用领域,QML 一直没有能够占据一定地位.很大一部分原因是,QML 缺少一些在企业应用中亟需的组件,比如按钮.菜单等.虽然移动领域,这些组件已经变 ...

  4. XML解析技术研究(一)

      摘要:XML作为过去十年中出现的最流行的技术之一,得到了广泛的应用,而其中XML解析技术是XML应用的关键.本文介绍了XML解析技术的研究动向,分析和比较了4种XML解析技术的优劣,并归纳总结了应 ...

  5. 设计模式22---设计模式之解释器模式(Interpreter)(行为型)

    1.讲解解释器模式 1.1解释器模式定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 1.2解释器模式要点 解析器:把描述客户端调用要求的表达式, ...

  6. PRD产品需求文档概要

    PRD概念 PRM就是Product Requirements Document的简称,也就是产品需求模型.一般来说一个产品会伴随有市场需求文档(Market Requirements Documen ...

  7. VS 创建 使用C++ 静态类库(Dll)

    创建静态类库 Walkthrough: Creating and Using a Dynamic Link Library (C++) 1:菜单栏-->File, New, Project. 2 ...

  8. 手势交互之GestureOverlayView

    一种用于手势输入的透明覆盖层,可以覆盖在其他空间的上方,也可包含在其他控件 android.gesture.GestureOverlayView 获得手势文件 需要用GesturesBuilder,如 ...

  9. HTML5+移动APP(2)

    原理: html 页面负责内容: ui 负责页面样式: js 负责调用原生app方法. html5: html5这部分负责页面,也就是app中你看到的东西,大概的架构和内容 ui: mui 介绍:和H ...

  10. Html5 部分特性

    HTML5 是 W3C 与 WHATWG 合作的结果. 编者注:W3C 指 World Wide Web Consortium,万维网联盟. 编者注:WHATWG 指 Web Hypertext Ap ...