2011-02-24 26 views
5

मैं कमांड लाइन तर्क से बूलियन मान प्राप्त करने के लिए बूस्ट प्रोग्राम विकल्पों का उपयोग कर रहा हूं। मैं अपने तर्क के रूप में "Y", हाँ "," एन "," नहीं "निर्दिष्ट किया जा करना चाहते हैं।बूलियन विकल्प

असल

मेरे कोड एक अस्थायी स्ट्रिंग कि

  1. boost program options
  2. द्वारा पार्स किया जाएगा का उपयोग कर यह किया
  3. "Y" के खिलाफ, "हाँ", "एन" या "नहीं"
  4. बूलियन चर सदस्य को सौंपा।

जाँच की उस के शीर्ष पर मैं भी एक और अस्थायी स्ट्रिंग डिफ़ॉल्ट मान रही उपयोग कर रहा हूँ

मैं वह सब काम किया है के बाद से मैं तुझे कि नीचे दिए गए कोड काम नहीं किया कोशिश की

 namespace pod = boost::program_options; 

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

आपको बताते हैं कि बढ़ावा कार्यक्रम विकल्प कुछ बेहतर है तो एक मैं उस लक्ष्य को हासिल करने के लिए उपयोग किया जा सकता है है?

उत्तर

4

आप एक स्ट्रिंग को एक या दूसरे तरीके से पार्स करने जा रहे हैं। कुछ विकल्प हैं, अधिकतर इस बात पर निर्भर करते हुए कि आप इस मूल्य पर कितनी बार पूछेंगे। मैंने हाल ही में जो कुछ भी उपयोग किया है उसके समान कुछ उदाहरण है; प्रतिलिपि बनाने योग्य और असाइन करने योग्य यह एसटीएल के साथ अच्छी तरह से काम करता है। मुझे लगता है कि मैं कुछ अतिरिक्त बातें यह 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 –

+1

@Abruzzo अगर इस उत्तर ने आपके प्रश्न को हल किया है, तो आपको इसे स्वीकार करना चाहिए। –

संबंधित मुद्दे