一直认为boost都是hpp直接调用就可以了,最近遇到两个例子都不是这样的一个是boost的thread,另外一个就是这个了,boost在编译好之后会有库文件的,注意不是在当前的libs下面,而是stage/libs下面,我们在使用这个模块的时候要加上相应的动态或者静态的库。

当我们写一些小程序的时候难免要写一些输入参数,当然用linux自带的也可以

[cpp] view plaincopy
  1. int next_option;
  2. /* Parse options. */
  3. do {
  4. next_option = getopt_long (argc, argv, short_options, long_options, NULL);
  5. }while(next_options);

但是我们要写很多error handing,user manual 之类的, 比较麻烦,而且打印出来的格式也不是很好看。

那boost的program_options可以帮助我们解决这个问题。

boost program_options不仅支持配置command line,而且支持配置像INI一样的配置文件,这个模块非常好,下面是对配置文件格式的说明:

语法大致有三条,一个是name value的对应关系,另一个是section的模块,最后一个是注释的规范。

Configuration file parser

The parse_config_file function implements parsing of simple INI-like configuration files. Configuration file syntax is line based:

  • A line in the form:

    name=value

    gives a value to an option.

  • A line in the form:

    [section name]

    introduces a new section in the configuration file.

  • The # character introduces a comment that spans until the end of the line.

The option names are relative to the section names, so the following configuration file part:

[gui.accessibility]
visual_bell=yes

is equivalent to

gui.accessibility.visual_bell=yes

如何实现一对多的支持?

如果只是command line里面的很简单 只要加一个token就可以,但是如果是配置文件的则validate

实现很简单:

po::value<vector<float> >(&(paralist))->multitoken()

注意利用第三个参数重载

namespace boost{
void validate(boost::any& v,
          const vector<string>& values,
            vector<float>*, int) {
    cout << "hello" << endl;
        vector<double> dvalues;
          for(vector<string>::const_iterator it = values.begin();
                      it != values.end();
                          ++it) {
                  //stringstream ss(*it);
                  cout<<*it<<endl;
                            }
}
}

如何支持负数?

负数和program option会有冲突,一般通过加引号来处理,或者通过去除短option,只支持长option

char* v[] = {"name","--IDlist=0","1","200","-2"}; int c = 5; std::vector<int> IDlist; namespace po = boost::program_options; po::options_description commands("Allowed options"); commands.add_options() ("IDlist",po::value< std::vector<int> >(&IDlist)->multitoken(), "Which IDs to trace: ex. --IDlist=0 1 200 -2") ("help","print help") ; po::variables_map vm; po::store(parse_command_line(c, v, commands, po::command_line_style::unix_style ^ po::command_line_style::allow_short), vm); po::notify(vm); BOOST_FOREACH(int id, IDlist) std::cout << id << std::endl;

下面讲一下具体的使用体会

1 打印很方便尤其是help manual, 对各种命令的错误的提示很好

2 type 和 name直接关联,根据名字直接读到变量中

3 支持command和文本配置文件,不同的源之间可以合并使用

4 没有办法指定变量的有效范围。

总之,用了之后颇有点专业软件的风范。

http://www.boost.org/doc/libs/1_45_0/doc/html/program_options.html

http://stackoverflow.com/questions/2935587/handle-complex-options-with-boosts-program-options/2939249#2939249

boost program_options相关推荐

  1. boost::program_options模块实现处理响应文件的测试程序

    boost::program_options模块实现处理响应文件的测试程序 实现功能 C++实现代码 实现功能 boost::program_options模块实现处理响应文件的测试程序 C++实现代 ...

  2. boost::program_options模块实现一个用户定义的类来解析 特定机制——不是默认使用的 iostream 操作的测试程序

    boost::program_options模块实现一个用户定义的类来解析 特定机制--不是默认使用的 iostream 操作的测试程序 实现功能 C++实现代码 实现功能 boost::progra ...

  3. boost::program_options::options_description相关的测试程序

    boost::program_options::options_description相关的测试程序 实现功能 C++实现代码 实现功能 boost::program_options::options ...

  4. boost::program_options模块实现处理选项组的测试程序

    boost::program_options模块实现处理选项组的测试程序 实现功能 C++实现代码 实现功能 boost::program_options模块实现处理选项组的测试程序 C++实现代码 ...

  5. boost::program_options模块实现使用命令行和配置文件的测试程序

    boost::program_options模块实现使用命令行和配置文件的测试程序 实现功能 C++实现代码 实现功能 boost::program_options模块实现使用命令行和配置文件的测试程 ...

  6. boost::program_options模块实现支持自定义选项语法的测试程序

    boost::program_options模块实现支持自定义选项语法的测试程序 实现功能 C++实现代码 实现功能 boost::program_options模块实现支持自定义选项语法的测试程序 ...

  7. boost::program_options模块一个配置ini文件被解析程序选项库,它包括许多不同的值类型的测试程序

    boost::program_options模块一个配置ini文件被解析程序选项库,它包括许多不同的值类型的测试程序 实现功能 C++实现代码 实现功能 boost::program_options模 ...

  8. boost学习之命令行参数解析库program_options

    介绍 程序参数项(program options)是一系列name=value对,program_options 允许程序开发者获得通过命令行(command line)和配置文件(config fi ...

  9. 简单解析C++基于Boost库实现命令行

    Boost库中默认自带了一个功能强大的命令行参数解析器,以往我都是自己实现参数解析的,今天偶尔发现这个好东西,就来总结一下参数解析的基本用法,该库需要引入program_options.hpp头文件, ...

最新文章

  1. Markdown语法-基础
  2. linux查找部署目录,mac/linux 查找软件安装、配置路径
  3. V4L2开发要点【转】
  4. 使用vl_sift提取图像特征
  5. 2020-10-28
  6. 图片夹_各种变调夹的优缺点、原理和使用方法
  7. C++11 右值引用、移动语义、完美转发、万能引用
  8. C#开发高亮语法编辑器(一)——TextBox ,RichTextBox
  9. java虚拟机MyEclipse_Eclipse和MyEclipse运行环境java虚拟机jvm设置,自己设置jre
  10. python中的然后_返回,然后等待另一个函数在python中完成
  11. centos6.9负载均衡方案完整配置(lvs+keepalived+pxc+nfs+业务系统)
  12. Windows10下VB6.0开发——利用PictureBox控件实现数据点实时绘图
  13. VS2005下配置OGRE
  14. 晶体管制程极限之后,多层CPU是否可能?
  15. 启明星数据库批量备份与还原工具
  16. 软件工程概述思维导图总结(一)
  17. 实验5 振幅调制(集成乘法器幅度调制电路)
  18. 建筑企业并购:人才整合策略
  19. 2022年导游资格考试测试题及答案(多选题)
  20. 《算法竞赛入门经典》Chap3

热门文章

  1. 报错解决:ninja: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ninja)
  2. java流类图结构_java I/O 流总结
  3. Centos7 上安装 mysql5.7
  4. phpstorm 点击方法跳转 后 返回 原来的位置
  5. sqlite3自增key设定(创建自增字段)
  6. 久其软件怎么样_久其软件助力中国电信顺利完成网络攻防演练
  7. 极限中0除以常数_高中物理必知的50个关键常数, 每个都是得分点!
  8. ksql 数量大于2_504深入解读路基土石方说明,路基填方数量组成?运距>15km咋办...
  9. 【PHPWord】列表ListItem
  10. verdi显示状态机名字_如何写好状态机(三)