65.9K
CodeProject 正在变化。 阅读更多。
Home

用 STL 轻松管理 argc 和 argv[]

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (12投票s)

2001年7月15日

2分钟阅读

viewsIcon

146570

downloadIcon

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

现在改变你的程序参数的设置是不是很容易呢?

© . All rights reserved.