gpt4 book ai didi

c++ - C++ 中的简单 getopt 实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:52 37 4
gpt4 key购买 nike

我正在用 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 循环中打印选项名称和显示给用户。实现这一目标的最佳方法是什么?任何人都可以提供指导或意见吗?

最佳答案

与其使用全局变量,我更喜欢使用返回值与“?”的组合。像下面这样

else if ((option.compare("?") == 0) && (getOptStatus == 0))
{
// if ? and return value 0 means finds a string in argv that is not
// registered with add options.
continue;
}
else if ((option.compare("?") == 0) && (getOptStatus == 1))
{
// if ? and return value 1 means finds an option string
// with missing option argument.
// print help and exit.
}

关于c++ - C++ 中的简单 getopt 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5547079/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com