典型的 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. hdu5127 Dogs' Candies CDQ分治 动态凸包

    传送门 题意 有三种操作 加入一个二元组\((x,y)\) 删除一个二元组\((x,y)\) 给出一个二元组\((a,b)\),问\(ax+by\)的最大值 题解 \(z=ax+by \Rightar ...

  2. Java 23种设计模式详尽分析与实例解析之二--结构型模式

    Java设计模式 结构型模式 适配器模式 模式动机:在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式.通常情况下,客户端可以通过目标类的接口访问它所提供的服务.又是,现有的类可以满足客 ...

  3. dos插入mysql乱码

    1.dos窗口向mysql数据库中插入数据时,如果包含中文的话那么是无法插入的.原因是默认character_set_client编码是ut8,而dos窗口默认编码是gbk.执行一下set chara ...

  4. eclipse编辑器,怎么创建PHP和JAVA的工程项目?

    eclipse编辑器,怎么创建PHP和JAVA的工程项目.强大的eclipse,编写php或者java由你选择!!! 我为什么这么说? 我是新手,写下这篇文章,可能对新手会有一点点的帮助而已,然后为了 ...

  5. [RxJS] Filtering operator: single, race

    Single, race both get only one emit value from the stream. Single(fn): const source = Rx.Observable. ...

  6. muduo网络库使用心得

    上个月看了朋友推荐的mudo网络库,下完代码得知是国内同行的开源作品,甚是敬佩.下了mudo使用手冊和035版的代码看了下结构,感觉是一个比較成熟并且方便使用的网络库.本人手头也有自己的网络库,尽管不 ...

  7. android 15 activity跳转

    从一个屏幕跳到另一个屏幕,一个activity跳转到另一个activity,Intent类用于组件之间传递数据和跳转,组件包括不仅activity. package com.sxt.day04_01; ...

  8. Qt5对Json的读写

      主要任务:通过Qt5完成对Json格式的文件的读写操作. ①首先读取json文件进行解析  ②对读取出来的东西判断是QJsonObject还是QJsonArray类型③对相应的类型根据提供的key ...

  9. 运行yum报错:Error: Cannot retrieve metalink for repository: epel. Please verify its path

    Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again 当我们安装第三方扩 ...

  10. sqlserver 2008表分区操作

    表分区操作步骤 1.设计表进行分区的方案,水平分区.垂直分区 a.水平切割将减少表的行数,这样可以将历史数据归档,减少表大小,提高访问速度. b.垂直切割将分为主表和从表方式,将主要的列字段存放在主表 ...