我正在C++中实现项目特定的“getopt”。为此,我实现了一个类,看起来像这样:“?”在C++中实现简单的getopt
class MyGetOptions {
private:
typedef std::map<std::string, bool> optionsTbl;
optionsTbl m_optionsTbl;
int m_currentArg;
// Prohibit copy and assignment.
MyGetOptions (const MyGetOptions &);
void operator= (const MyGetOptions &);
public:
MyGetOptions();
inline bool addOption(std::string option, bool isArgReq);
int getOpt(int argc, char *argv[], std::string& option, std::string& optArg);
// Debug functions.
void printOptionTbl();
};
由供应商上述类
现在使用看起来如下
MyGetOptions myOpts;
myOpts.addOption("myName", true);
myOpts.addOption("mySettings", false);
std::string optArg;
std::string option;
while((myOpts.getOpt(argc, argv, option, optArg)) != -1)
{
if(option.compare("myName") == 0)
{
std::cout << "The myName option is set and value is " << optArg << std::endl;
continue;
}
// ... additional options.
else if(option.compare("?") == 0)
{
// print help and exit.
}
else
{
// print help and exist.
}
}
在本设计中,我回国标记getOpt
是否在argv
中找到未注册的选项字符,或者是否检测到缺少选项参数。如果所有命令行选项都已解析,则getOpt
返回-1。
我想区分何时返回?
是否提供argv
未提供注册或缺少选项参数提供,还希望在while循环中打印选项名称并向用户显示。什么是最好的方式来实现这一目标?任何人都可以提供指导或输入吗?
你为什么要重新发明轮子? http://www.boost.org/doc/libs/1_46_1/doc/html/program_options.html http://www.chemie.fu-berlin.de/chemnet/use/info/libgpp/libgpp_39.html http: //code.google.com/p/getoptpp/ ... – 2011-04-05 04:21:54
由于初学轮修者需要练习制作轮子,因此不应在创建基本轮子之前创建精心设计的新设计。 – 2011-04-05 04:25:15