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

使用 STL 解析命令行

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.40/5 (9投票s)

2006年3月10日

CPOL

2分钟阅读

viewsIcon

40883

downloadIcon

732

一个简单的使用 STL 的命令行解析器

引言

本文展示了使用 STL 编写的代码,用于解析命令行。它提供了三种命令行参数语法形式:a) 配对,形式为命令行中的 "/Name=Value",b) 开关,形式为命令行中的 "/Value",以及 c) 未解释,形式为命令行中的 "Value"。

该类设计注重易用性,以及 Windows 风格的命令行参数。它可定制性不高,但可以从中派生类,并且所有函数都是虚函数。通过少量修改,它可以与 WinMain 一起使用,但我的本意是将其与标准的 main argc, argv 类型参数一起使用。

使用代码

这段代码非常易于使用。唯一类别的完整名称是 Epoch::Foundation::CommandLineParser,在本文的其余部分,我将假设用户正在使用该命名空间。最少情况下,只需创建该类 CommandLineParser 的一个实例,然后调用函数 parse,并将传递给 main 的命令行参数作为参数传递。

CommandLineParser parser; 
parser.parse(argc, argv);


然后按如下方式读取值。

// Reads a value for a named pair. "/src=MyDir"
parser.getValue("src","Blank");

// Reads a switch, returns true if it exists. "/Pause"
parser.switchExists("Pause");

// Reads an uninterpreted data, returns true if it exists. "NoUse"
parser.nonInterpretedExists("NoUse");

在上面的示例中,参数名称是 src. Blank 是默认值,以防用户未为该配对传递任何值。

此外,程序员通常期望命令行上有一组最小的参数。如果未存在所需的最小参数,程序通常会显示帮助屏幕后终止。我提供了一个函数 verifyCompulsory,它接受一个必需配对、开关和未解释数据的列表。显然,它主要对配对有用,但为了完整性,我提供了验证所有三种格式的功能。

 vectorOfString vec_RequiredPairs;

 vec_RequiredPairs.push_back("src");
 vec_RequiredPairs.push_back("dst");
 vec_RequiredPairs.push_back("versionize");

 if(!parser.verifyCompulsory(vec_RequiredPairs)) {
     cerr << endl << "Invalid Parameters." << endl;
     cerr << "Syntax: QUCL /src=\"source directory\" /dst=\"destination directory\" /versionize=true/false" << endl;
     throw Err::InvalidInput; 
}

关注点

如您将在实现中看到,我使用了 STL 来实现解析器。它非常简单地使用了 STL,但无论如何,它有助于使代码更小、更易于实现。

历史

这是第一个版本。

© . All rights reserved.