2010-02-08 18 views
7

मैंने एक छोटा ऐप लिखा जो कमांड लाइन पार्सिंग के लिए boost :: program_options का उपयोग करता है। मैं कुछ विकल्प रखना चाहता हूं जो तर्क मौजूद हैं, और यदि पैरामीटर दिया गया है तो वैकल्पिक मान को वैकल्पिक रूप से मुद्रित करता है लेकिन कोई तर्क मौजूद नहीं है। तो "सेट-मोड" दिखाई देगा:बढ़ावा देने के साथ और बिना तर्क के पैरामीटर्स :: program_options

dc-ctl --brightness 15 

और "मोड मिलता है" होगा:

dc-ctl --brightness 
brightness=15 

समस्या इस पकड़ने के बिना, मैं दूसरे मामले को संभालने के लिए पता नहीं कैसे अपवाद:

error: required parameter is missing in 'brightness' 

क्या यह त्रुटि फेंकने से बचने का कोई आसान तरीका है? जैसे ही तर्कों को पार्स किया जाता है, ऐसा होता है।

उत्तर

4

मुझे How to accept empty value in boost::program_options से आंशिक समाधान मिला है जो उन पैरामीटरों पर implicit_value विधि का उपयोग करने का सुझाव देता है जो तर्क मौजूद हो सकते हैं या नहीं। तो मेरी "चमक" पैरामीटर को प्रारंभ करने के लिए कॉल इस तरह दिखता है:

("brightness,b", po::value<string>()->implicit_value(""), 

मैं तो चर नक्शे पर पुनरावृति और किसी भी तर्क एक स्ट्रिंग है कि के लिए, मैं जाँच यदि वह रिक्त हो और यदि ऐसा है तो मैं वर्तमान मूल्य प्रिंट । यही कारण है कि कोड इस तरह दिखता है:

// check if we're just printing a feature's current value 
    bool gotFeature = false; 
    for (po::variables_map::iterator iter = vm.begin(); iter != vm.end(); ++iter) 
    { 
     /// parameter has been given with no value 
     if (iter->second.value().type() == typeid(string)) 
      if (iter->second.as<string>().empty()) 
      { 
       gotFeature = true; 
       printFeatureValue(iter->first, camera); 
      } 
    } 

    // this is all we're supposed to do, time to exit 
    if (gotFeature) 
    { 
     cleanup(dc1394, camera, cameras); 
     return 0; 
    } 

अद्यतन:

./dc-ctl -b500 
बजाय

: इस aforementioned वाक्य रचना बदलता है, जब अंतर्निहित मूल्यों, अब तर्कों का उपयोग, जब दिया, इस रूप में होने चाहिए
./dc-ctl -b 500 

आशा है कि यह किसी और के लिए सहायक होगा।

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