我正在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