收藏 分享(赏)

[C++Boost]程序参数项解析库Program_options使用指南.doc

上传人:gnk289057 文档编号:6211613 上传时间:2019-04-02 格式:DOC 页数:9 大小:49KB
下载 相关 举报
[C++Boost]程序参数项解析库Program_options使用指南.doc_第1页
第1页 / 共9页
[C++Boost]程序参数项解析库Program_options使用指南.doc_第2页
第2页 / 共9页
[C++Boost]程序参数项解析库Program_options使用指南.doc_第3页
第3页 / 共9页
[C++Boost]程序参数项解析库Program_options使用指南.doc_第4页
第4页 / 共9页
[C++Boost]程序参数项解析库Program_options使用指南.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、C+Boost程序参数项解析库Program_options使用指南 介绍程序参数项(program options)是一系列name=value对,program_options 允许程序开发者获得通过命令行(command line)和配置文件(config file)获取这些参数项。为什么需要这样一个库?为什么比你手工写代码分解命令行参数要好? 使用更容易。定义参数处理的语法简单,库自身很小。像转换参数值到指定的类型和保存参数值到变量的事情都是自动处理。 错误报告更友好。可报告错误的命令行参数。另外这个库能自动生成使用帮助,避免手工更新使用帮助导致的不一致。 参数能从不同地方读取。当命令

2、行参数不能满足要求,需要改用配置文件或环境变量。这些功能都能支持,代码改动很小。 使用指南快速入门 使用详解 参数多种来源 在本节,我们从最简单的例子开始,学习program_options库的通常用法。下面的例子仅仅是代码片断,完整例子在“ BOOST_ROOT/libs/program_options/example”目录里。对所有例子,假定都在如下名字空间中: namespace po = boost:program_options;快速入门第一个例子尽可能简单:仅仅包含两个参数项。代码如下(完整代码见“example/first.cpp”):/ Declare the supporte

3、d 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 default_value(10), “optimizat

4、ion level“)(“include-path,I“, po:value(), “include path“)(“input-file“, po:value(), “input file“);The “-help“ 项和前例一样,在项目中有这个参数项是个好注意。The “optimization“ 项体现两个新特性 . 首先,我们传递变量(p.add(“input-file“, -1);po:variables_map vm;po:store(po:command_line_parser(ac, av).options(desc).positional(p).run(), vm);po:n

5、otify(vm);前两行指出所有的“ 位置参数项 ”应被翻译成“input-file”项。要注意用 command_line_parser 类解析命令行,而不是 parse_command_line 函数。parse_command_line函数是为处理简单情况对command_line_parser类的封装,但现在要传递附加信息就不适用了。现在,所有参数项被描述且被解析。我们暂不实现剩下的编译逻辑,仅仅打印参数项:if (vm.count(“include-path“)cout () () default_value(10), “optimization level“)(“include-

6、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“ 项声明中调用 compos

7、ing 方法,说明从不同来源的值应当被合并在一起,下面很快就会看到。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 option

8、s“);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

9、/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 /op

10、tInput 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 m

11、essage“)(“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 default_value(10), “optimization level“)(“include-path,I“, po:value(), “include path“)(“input-file“, po:value(), “input file“);

12、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 () () default_value(10), “optimization level“)(“include-path,I“, po:value()-composing(), “include pat

13、h“);/ 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(confi

14、g).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:positional_options_description p;p.add(“input-file“, -1);po:variables_map vm;store(po:command_line_parser(ac, av).options(cmdline_options).positional(p).run(), vm);ifstream ifs(“multiple_sources.cfg“);store(parse_config_file(ifs, config_file_options), vm);notify(vm);if (vm.count(“help“) cout () () “n“;cout “Optimization level is “ opt “n“; catch(exceptionreturn 1; return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报