使用 STL 解析命令行






2.40/5 (9投票s)
一个简单的使用 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,但无论如何,它有助于使代码更小、更易于实现。
历史
这是第一个版本。