2012-07-01 21 views
5

क्या यह जांचने का एक आसान तरीका है कि किसी विकल्प का तर्क पूर्वनिर्धारित विकल्पों के सेट के अंदर है या नहीं? यहां "सरल" का मतलब विज्ञापन-वर्ग वर्ग को परिभाषित किए बिना है।बूस्ट प्रोग्राम विकल्प विकल्प

मान लीजिए मैं विकल्प --myoption जो मूल्य "myvalue1" या "myvalue2"

अजगर में उदाहरण के लिए होना आवश्यक है choices option in optparse

+1

क्या यह सिर्फ स्ट्रिंग की तुलना नहीं करेगा? मान लीजिए कि वे 'std :: string' दोनों हैं, आप' if ((arg == myvalue1) || (arg == myvalue2) कर सकते हैं ||)। –

+0

सुनिश्चित करें, यह काम करता है, लेकिन मुझे 'प्रोग्राम-विकल्प' में कुछ और एकीकृत करने की आवश्यकता है (उदाहरण के लिए यह सहायता संदेश बदल सकता है), उदाहरण के लिए गैर-स्ट्रिंग –

+0

के साथ काम करना आप शायद जो करना चाहते हैं उसके बारे में अधिक समझाएं, यह असपष्ट है। –

उत्तर

0

साथ वास्तव में आसान के रूप में मैं सिर्फ महसूस किया गया है, तो आप बस को परिभाषित दो परस्पर अनन्य विकल्पों को परिभाषित कर सकते है real.cpp में समझाया गया एक छोटा सा कार्य।

void conflicting_options(const boost::program_options::variables_map & vm, 
         const std::string & opt1, const std::string & opt2) 
{ 
    if (vm.count(opt1) && !vm[opt1].defaulted() && 
     vm.count(opt2) && !vm[opt2].defaulted()) 
    { 
     throw std::logic_error(std::string("Conflicting options '") + 
           opt1 + "' and '" + opt2 + "'."); 
    } 
} 

और फिर बुला

conflicting_options (vm, "quiet", "verbose"); 

सही होने के बाद boost::program_options::store()

जांच की जा रही है कि --myoption को myvalue1 या myvalue2 तो बस हो जाता है बराबर है: उदाहरण के लिए, आप दो परस्पर विरोधी विकल्प एक conflicting_options() समारोह को परिभाषित निर्दिष्ट कर सकते हैं फ़ंक्शन कॉल का मामला

मुझे अभी भी समझ में नहीं आता है कि दो परस्पर अनन्य स्थितित्मक विकल्पों को परिभाषित करना संभव है, लेकिन यह एक और सवाल होना चाहिए।

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