关键词不能为空

当前您在: 主页 > 英语 >

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

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-19 02:12
tags:

-

2021年2月19日发(作者:greentown)



C++Boost


]程序参数项解析库


Program_options


使用指南





介绍



程序参数项


(program options)


是一系列


name=value


对,


program_options


允许程序开发者获得通

过命令行


(command line)


和配置文件


(config file)


获取这些参数项。



为什么 需要这样一个库?为什么比你手工写代码分解命令行参数要好?



?



使用更容易。定义参数处理的语法 简单,库自身很小。像转换参数值到指定的类型和保


存参数值到变量的事情都是自动处理 。




?


< /p>


错误报告更友好。可报告错误的命令行参数。另外这个库能自动生成使用帮助,避免手


工更新使用帮助导致的不一致。




?



参数能从不同地方读取。当命令行 参数不能满足要求,需要改用配置文件或环境变量。



这些功能都能支持,代码改动很小。




使用指南



快速入门




使用详解




参数多种来源



在本节,我们从最简单的例子开始,学习


program_options


库的通常用法。下面的例子仅仅是代


码片断,完整例子在


“BOOST_ROOT/libs/program_options/example”

< p>
目录里。对所有例子,假定


都在如下名字空间中:




namespace po = boost::program_options;


快速入门



第一个例子尽可能简单:仅仅包含两个参数项。代码如下(完整代码见

< br>“example/”


):



// Declare the supported options.


po::options_description desc(


_options()


(


(


;



po::variables_map vm;


po::store(po::parse_command_line(ac, av, desc), vm);


po::notify(vm);



if ((


cout << desc <<


return 1;


}



if ((


cout <<


<< vm[


} else {


cout <<


}


首先用类



options_description


< br>描述所有允许的参数项,类的


add_options


方 法返回定义了


operator()


的代理对象,调用其


operator()


用来实际描述参数项,函数参数是参数项名称, 相关值


信息,参数项描述。本例中,第一个参数项没有值,第二个参数项有一个


int


类型的值。



其后,定义一个类



variables_map


对象。用来存储参数项的值,其 能存储任意类型的值。接着


调用


store, parse_command_line




notify


函数,解析命令行参数并保存到


vm


中。



现在,可以像使用

< br>std::map


一样来使用


variables_ma p


类,但存储的值必须能通过



at


方法找


回。假如调用


as


方法指定的类型和实际类型不符,将抛出异常)



现在自己可以尝试编译一下代码,如何编译的例子如下:




$$bin/gcc/debug/first


Compression level was not set.


$$bin/gcc/debug/first --help


Allowed options:


--help : produce help message


--compression arg : set compression level



$$bin/gcc/debug/first --compression 10


Compression level was set to 10.



使用详解



参数项的值,除了


int


还有其他类型,还有其他属性 ,我们下面将讨论。完整例子在


“example/options_”


中。



假如我们写一个编译器程序。它有最优化级别


,


包含多个路径


,


多个输入文件等参数 。描述参数


项如下:





int opt;


po::options_description desc(


_options()


(


(



(



(


;


The


项和前例一样,在项目中有这个参数项是个好注意。



The


项体现两个新特性


.


首先,我们传递变量


(&opt)


地址,这个 变量用来保存获得


的参数项的值。然后,指定一个缺省值,用在此参数项用户没有设置值 的时候。





The


项说明了


options_d escription



类接口仅仅来源于命令行的例子。用户 喜欢


用短参数项名称,



includ e-


path,I”


名指出短参数项名是


“I”.


因此,



--includ e-


path”



< br>-


I”


都能用。





The


参数项指定处理文件列表。像下面这样写没有问题:



compiler --input-file=



但通常情况常常这么写:



compiler



这里要解释一下这种用法。




像上例,没有参数名的命令行选项,在这个库里称为



位置参数项



,也能处理。库能解释

< br>“”


等同于



--input-


file=”


。下面是所需的附加的代码:


po::positional_options_description p;


(



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 ((


{


cout <<


<< vm[


}



if ((


{


cout <<


<< vm[


}



cout <<


如何编译的例子如下:




$$bin/gcc/debug/options_description --help


Usage: options_description [options]


Allowed options:


--help : produce help message


--optimization arg : optimization level


-I [ --include-path ] arg : include path


--input-file arg : input file


$$bin/gcc/debug/options_description


Optimization level is 10


$$bin/gcc/debug/options_description --optimization 4 -I foo


Include paths are: foo


Input files are:


Optimization level is 4


这里有个 小问题,



帮助信息



要求指定



--input-


file”


项名称,这将把用户弄糊涂。在后面的例子


中可看到 怎样隐藏这个信息。



参数多种来源





要求用户在命令行给我们的编译器 指定所有参数不太现实。假如用户安装新库且想传递一个附


加命令行参数该怎么做?想实 现一次选择多次运行的时候使用该怎么做?可以创建一个配置文


件把命令行参数组织在一 起来完成这个工作。



当然,解析时需要结合命令行参数和配置 文件两方面的值。例如,在命令行指定的



最优化级

< p>



的值将覆盖配置文件的值。另一方面,



包含路径



应该包 含命令行和配置文件里两方面的


值。





面看代码。完整代码在

< p>
“examples/multiple_”


。参数项定义有两种细节。首 先,定




options_desc ription


类的几个实例。原因是,通常情况下,不是所有参数项属性是类似的。一


些项,例如上面的



input-


file”




应 该在自动帮助信息里不出现。一下项仅在配置文件中有意


义。其次,帮助信息有组织的输 出是个好主意,而不仅仅是参数项的长列表。下面声明几组参


数项:


// Declare a group of options that will be


// allowed only on command line


po::options_description generic(


_options()


(


(




// Declare a group of options that will be


// allowed both on command line and in


// config file


po::options_description config(


_options()


(



(


po::value< vector >()->composing(),





// 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(


_options()


(



注意在



项声明中调用


composing


方法,说明从不同来源的值应当被合并在一起,

-


-


-


-


-


-


-


-



本文更新与2021-02-19 02:12,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/666458.html

[C++Boost]程序参数项解析库Program_options使用指南的相关文章

[C++Boost]程序参数项解析库Program_options使用指南随机文章