[C++Boost]程序参数项解析库Program_options使用指南.doc_第1页
[C++Boost]程序参数项解析库Program_options使用指南.doc_第2页
[C++Boost]程序参数项解析库Program_options使用指南.doc_第3页
[C++Boost]程序参数项解析库Program_options使用指南.doc_第4页
[C++Boost]程序参数项解析库Program_options使用指南.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+Boost程序参数项解析库Program_options使用指南 介绍程序参数项(program options)是一系列name=value对,program_options 允许程序开发者获得通过命令行(command line)和配置文件(config file)获取这些参数项。为什么需要这样一个库?为什么比你手工写代码分解命令行参数要好?l 使用更容易。定义参数处理的语法简单,库自身很小。像转换参数值到指定的类型和保存参数值到变量的事情都是自动处理。 l 错误报告更友好。可报告错误的命令行参数。另外这个库能自动生成使用帮助,避免手工更新使用帮助导致的不一致。 l 参数能从不同地方读取。当命令行参数不能满足要求,需要改用配置文件或环境变量。这些功能都能支持,代码改动很小。 使用指南快速入门 使用详解 参数多种来源 在本节,我们从最简单的例子开始,学习program_options库的通常用法。下面的例子仅仅是代码片断,完整例子在“BOOST_ROOT/libs/program_options/example”目录里。对所有例子,假定都在如下名字空间中: namespace po = boost:program_options;快速入门第一个例子尽可能简单:仅仅包含两个参数项。代码如下(完整代码见“example/first.cpp”):/ Declare the supported options.po:options_description desc(Allowed options);desc.add_options() (help, produce help message) (compression, po:value(), set compression level);po:variables_map vm;po:store(po:parse_command_line(ac, av, desc), vm);po:notify(vm); if (vm.count(help) cout desc n; return 1;if (vm.count(compression) cout Compression level was set to vmcompression.as() .n; else cout default_value(10), optimization level) (include-path,I, po:value(), include path) (input-file, po:value(), input file);The -help 项和前例一样,在项目中有这个参数项是个好注意。The optimization 项体现两个新特性. 首先,我们传递变量(&opt)地址,这个变量用来保存获得的参数项的值。然后,指定一个缺省值,用在此参数项用户没有设置值的时候。The include-path 项说明了options_description 类接口仅仅来源于命令行的例子。用户喜欢用短参数项名称,“include-path,I”名指出短参数项名是“I”.因此,“-include-path”和“-I”都能用。The input-file 参数项指定处理文件列表。像下面这样写没有问题:compiler -input-file=a.cpp 但通常情况常常这么写:compiler a.cpp 这里要解释一下这种用法。 像上例,没有参数名的命令行选项,在这个库里称为“位置参数项”,也能处理。库能解释“a.cpp”等同于“-input-file=a.cpp”。下面是所需的附加的代码:po:positional_options_description p;p.add(input-file, -1);po:variables_map vm;po:store(po:command_line_parser(ac, av). options(desc).positional(p).run(), vm);po:notify(vm); 前两行指出所有的“位置参数项”应被翻译成“input-file”项。要注意用 command_line_parser 类解析命令行,而不是 parse_command_line 函数。parse_command_line函数是为处理简单情况对command_line_parser类的封装,但现在要传递附加信息就不适用了。现在,所有参数项被描述且被解析。我们暂不实现剩下的编译逻辑,仅仅打印参数项:if (vm.count(include-path) cout Include paths are: vminclude-path.as() n;if (vm.count(input-file) cout Input files are: vminput-file.as() n;cout Optimization level is opt default_value(10), optimization level) (include-path,I, po:value()-composing(), include path) ;/ Hidden options, will be allowed both on command line and/ in config file, but will not be shown to the user.po:options_description hidden(Hidden options);hidden.add_options() (input-file, po:value(), input file) ; 注意在include-path 项声明中调用composing 方法,说明从不同来源的值应当被合并在一起,下面很快就会看到。options_description 类的add 方法能被用于进一步组合参数项:po:options_description cmdline_options;cmdline_options.add(generic).add(config).add(hidden);po:options_description config_file_options;config_file_options.add(config).add(hidden);po:options_description visible(Allowed options);visible.add(generic).add(config); 除了额外需要调用 parse_config_file 和 store 函数以外,参数值的解析和存储和通常一样。 但是当命令行和配置文件中同样的参数被指定了如何处理?通常,首选第一个被存储的值。 这说明了“-optimization”项的值如何产生。对“组合(composing)”项,像“include-file”,值被合并在一起。如何编译的例子如下: $bin/gcc/debug/multiple_sourcesInclude paths are: /optOptimization level is 1$bin/gcc/debug/multiple_sources -helpAllows options:Generic options: -v -version : print version string -help : produce help messageConfiguration: -optimization n : optimization level -I -include-path path : include path$bin/gcc/debug/multiple_sources -optimization=4 -I foo a.cpp b.cppInclude paths are: foo /optInput files are: a.cpp b.cppOptimization level is 4附录为加强理解,这里列出了上面提到的完整源代码。 文件example/first.cpp #include namespace po = boost:program_options;#include #include using namespace std;int main(int ac, char* av) try po:options_description desc(Allowed options); desc.add_options() (help, produce help message) (compression, po:value(), set compression level) ; po:variables_map vm; po:store(po:parse_command_line(ac, av, desc), vm); po:notify(vm); if (vm.count(help) cout desc n; return 1; if (vm.count(compression) cout Compression level was set to vmcompression.as() .n; else cout Compression level was not set.n; catch(exception& e) cerr error: e.what() n; return 1; catch(.) cerr Exception of unknown type!n; return 0;文件example/options_description.cpp #include using namespace boost;namespace po = boost:program_options;#include #include #include using namespace std;/ A helper function to simplify the main part.templateostream& operatordefault_value(10), optimization level) (include-path,I, po:value(), include path) (input-file, po:value(), input file) ; po:positional_options_description p; p.add(input-file, -1); po:variables_map vm; po:store(po:command_line_parser(ac, av). options(desc).positional(p).run(), vm); po:notify(vm); if (vm.count(help) cout Usage: options_description optionsn; cout desc; return 0; if (vm.count(include-path) cout Include paths are: vminclude-path.as() n; if (vm.count(input-file) cout Input files are: vminput-file.as() n; cout Optimization level is opt n; catch(exception& e) cout e.what() n; return 1; return 0; 文件examples/multiple_sources.cpp #include namespace po = boost:program_options;#include #include #include using namespace std;/ A helper function to simplify the main part.templateostream& operatordefault_value(10), optimization level) (include-path,I, po:value()-composing(), include path) ; / Hidden options, will be allowed both on command line and / in config file, but will not be shown to the user. po:options_description hidden(Hidden options); hidden.add_options() (input-file, po:value(), input file) ; po:options_description cmdline_options; cmdline_options.add(generic).add(config).add(hidden); po:options_description config_file_options; config_file_options.add(config).add(hidden); po:options_description visible(Allowed options); visible.add(generic).add(config); po

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论