2011-02-24 22 views
5

Boole değerleri komut satırı bağımsız değişkeninden almak için destek programı seçeneklerini kullanıyorum. Benim argüman "Y" Evet", 'N', 'Hayır' olarak belirtilebilir istiyoruz.boole seçenekleri

Aslında

kodum

  1. boost program options
  2. tarafından ayrıştırılır olacağını geçici dizesi kullanarak yaptım
  3. Ben de varsayılan değer elde başka geçici dize kullanıyorum Bunun üzerine, "Evet", "N" veya "Hayır"
  4. boolean değişken üyesine tahsis.

"Y" ile karşılaştırılırBen işe yaramadı aşağıda sana kod çalıştı beri Tüm bunları çalışma yaptı

 namespace pod = boost::program_options; 

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

Eğer boost program seçenekleri Bunu başarmak için kullanmak sonra bazı iyi kullanılıp kullanılamayacağını biliyor musunuz?

cevap

4

Bir veya daha fazla bir dizeyi ayrıştıracaksınız. Çoğunlukla bu değeri sorgulamak için ne sıklıkta olacağınıza bağlı olarak birkaç seçenek vardır. Son zamanlarda kullandığım şeye benzeyen bir şey örneği; CopyConstructable ve Assignable bu yüzden STL ile iyi çalışır. Ben o program_options ile çalışmak için almak için birkaç ekstra şeyler yapmak için gerekli düşünüyorum, ama özü olsun: yanıt için ve boost kullanımı için

#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

Teşekkür :: iequals..I düşünmemiştim . Saygılarımızla AFG –

+1

@Abruzzo Eğer bu cevap sorunuzu çözdüyse, kabul etmelisiniz. –