在软件开发过程中,命令行参数的解析是一个常见的需求。一个优秀的参数解析工具可以极大地简化这一过程。本文介绍的是一个简单易用的命令行参数解析工具,它支持带参数的选项、可选参数,并能自动输出错误信息和简短手册。该工具使用STL,并且符合Unicode标准。
工具的文档、源代码、静态库构建文件和测试应用程序的源代码都包含在Arguments_src.zip文件中。以下是一个简单的示例代码,足以让对它产生兴趣:
#include "Arguments.h"
void main(int argc, char *argv[]) {
Arguments cArg("argtest", "(C) 2001 NOVACOM GmbH", "-/");
// 添加一个简单的选项,例如"-h"来获取手册
cArg.AddOption('h', "显示使用帮助");
// 定义一个参数"2",稍显复杂,因为现在想要为选项添加一个参数
Arguments::Option cOpt('2', "定义额外的输入文件");
cOpt.AddArgument("outfile2", "额外的输入文件名");
cArg.AddOption(cOpt);
// 定义参数
cArg.AddArgument("infile", "要读取的文件名");
// 可以为参数设置默认值,使其成为可选参数
cArg.AddArgument("outfile", "输出文件名", "stdout");
// 定义完选项和参数后,可以指示Arguments实例解析命令行
if (!cArg.Parse(argc, argv)) exit(-1);
// 请求一个选项(例如"-h"选项)
if (cArg['h']) {
cArg.Usage();
exit(0);
}
// 对于"-2"选项,也可以通过[]获取该选项的参数
if (cArg['2'])
cout << "选项-2已设置,outfile2 = " << cArg['2']['outfile2'] << endl;
else
cout << "选项-2未设置" << endl;
// 请求参数没有太大区别
cout << "infile = " << cArg["infile"] << endl;
}
以上代码展示了如何使用该工具来定义和解析命令行参数。首先,创建了一个Arguments实例,提供了应用程序的名称、版权声明和可能的选项标记符。然后,添加了一个简单的选项"-h",用于获取使用帮助。接着,定义了一个参数"2",并为其添加了一个额外的参数"outfile2"。
还定义了两个参数"infile"和"outfile",其中"outfile"是一个可选参数,并且为其设置了一个默认值"stdout"。在定义完所有选项和参数后,指示Arguments实例解析命令行。如果解析失败,程序将退出。
如果用户请求了"-h"选项,程序将输出使用帮助并退出。对于"-2"选项,可以通过[]操作符获取该选项的参数。最后,请求并输出了"infile"参数的值。
这个工具的手册输出如下:
Usage: argtest [-2 outfile2] [-h] infile [outfile]
Options:
-2 定义额外的输入文件
outfile2 = 额外的输入文件名
-h 显示使用帮助
Arguments:
infile = 要读取的文件名
outfile = 输出文件名
可选参数 (
默认值
=
'
stdout'
)