2011-02-24 59 views
5

我使用boost程序選項從命令行參數中獲取布爾值。我想指定我的說法是「Y」,是的」,‘N’,‘否’。來自boost程序選項的布爾選項

其實我的代碼,這樣做是使用臨時字符串

  1. boost program options
  2. 解析
  3. 覈對「Y」,「是」,「N」或「否」
  4. 指定到布爾變量成員。

最重要的是我還使用另一個臨時串獲取默認值。

我做了所有的工作,因爲我想你的代碼下面,沒有工作

 namespace pod = boost::program_options; 

     ("Section.Flag", 
      pod::value<bool>(&myFlag_bool)->default_value(false), 
      "description") 

你知道提升程序選項是否可以使用一些更好的那麼一個我用它來實現這一目標?

回答

4

您將以某種方式解析字符串。有幾個選項,主要取決於你將多久查詢一次這個值。這是一個類似於我最近使用的例子; CopyConstructable和Assignable,因此它可以很好地與STL配合使用。我想,我需要做一些額外的東西,讓它使用program_options工作,但你得到的要點:

#include <boost/algorithm/string.hpp> 

class BooleanVar 
{ 
public: 
    BooleanVar(const string& str) 
     : value_(BooleanVar::FromString(str)) 
    { 
    }; 

    BooleanVar(bool value) 
     : value_(value) 
    { 
    }; 

    BooleanVar(const BooleanVar& booleanVar) 
     : value_(booleanVar) 
    { 
    }; 

    operator bool() 
    { 
     return value_; 
    }; 

    static bool FromString(const string& str) 
    { 
     if (str.empty()) { 
      return false; 
     } 

     // obviously you could use stricmp or strcasecmp(POSIX) etc if you do not use boost 
     // or even a heavier solution using iostreams and std::boolalpha etc 
     if (
      str == "1" 
      || boost::iequals(str, "y") 
      || boost::iequals(str, "yes") 
      || boost::iequals(str, "true") 
     ) 
     { 
      return true; 
     } 

     return false; 
    }; 

protected: 
    bool value_; 
}; 
+0

感謝您的答覆和提升的使用:: iequals..I從來沒有想過這個問題。問候AFG – 2011-02-27 10:25:54

+1

@Abruzzo如果這個答案解決了你的問題,你應該接受它。 – 2011-03-03 04:07:34