用 STL 轻松管理 argc 和 argv[]






4.96/5 (12投票s)
2001年7月15日
2分钟阅读

146570

920
这个类可以非常容易和统一地处理你的 `main()` 函数的参数列表。它提供了许多功能来支持带有参数的选项、可选参数以及自动输出错误消息和简短的手册。它使用 STL 并且符合 Unicode 标准。
引言
这个类以非常简单的方式统一了读取 `main()` 函数的参数列表的过程。它提供了许多功能来支持带有参数的选项、可选参数以及自动输出错误消息和简短的手册。它使用 STL 并且符合 Unicode 标准。
一个简短的 HTML 文档、源代码、一个用于静态库的 `.DSP` 文件和一个测试应用程序都包含在 Arguments_src.zip 中。
下面的代码应该足以引起你的兴趣
在包含头文件之后...
#include "Arguments.h"
...你在你的 `main()` 函数中创建一个 Arguments
实例;应用程序的名称、版权声明和可能的选项标记作为参数传递给构造函数...
void main( int argc, char *argv[] ) { Arguments cArg( "argtest", "(C) 2001 NOVACOM GmbH", "-/" );
现在你添加选项和参数的定义。第一个例子是一个简单的选项 "-h" 来获取手册。为此,你可以使用 AddOption()
函数,传入字符 'h' 和一个简短的描述,该描述将自动出现在手册中。
cArg.AddOption('h', "display usage help");
第二个例子是参数 "2"。它的定义稍微复杂一些,因为我们现在想为选项添加一个参数。构建 cOpt
实例与调用 AddOption
类似。以这种方式创建选项后,你可以使用 AddArgument()
向选项添加参数!
Arguments::Option cOpt( '2', "define additional input file" ); cOpt.AddArgument( "outfile2", "additional input filename" ); cArg.AddOption( cOpt );
添加参数也很简单。你使用 AddArgument() 定义一个带有名称和简短描述的参数。
cArg.AddArgument( "infile", "filename to read" );
你还可以为参数提供一个默认值。结果是一个可选参数...
cArg.AddArgument( "outfile", "filename for output", "stdout" );
定义选项和参数后,你可以指示你的 Arguments
实例使用...解析命令行。
if( !cArg.Parse( argc, argv ) ) exit(-1);
要请求一个选项(例如,-h 选项),你只需要编写以下代码...
if( cArg['h'] ) { cArg.Usage(); exit(0); }
对于 '-2' 也是一样的,并且你还可以使用 [] 获取该选项的参数...
if( cArg['2'] ) cout << "Option -2 set, outfile2 = " << cArg['2']["outfile2"] << endl; else cout << "Option -2 not set" << endl;
请求参数 也没有什么不同...
cout << "infile = " << cArg["infile"] << endl;
所以我们示例的手册输出将会是...
Usage: argtest [-2 outfile2] [-h] infile [outfile]
Options:
-2 define additional input file
outfile2 = additional input filename
-h display usage help
Arguments:
infile = filename to read
outfile = filename for output
optional argument (default='stdout')
(C) 2001 NOVACOM GmbH
现在改变你的程序参数的设置是不是很容易呢?