2010-05-26 9 views
6

मैं बढ़ावा उपयोग कर रहा हूँ :: program_options इस तरह:बढ़ा सकते हैं :: program_options "-" से अधिक एक डिलीमीटर का उपयोग करें?

namespace po = boost::program_options; 
po::options_description desc("Options"); 
desc.add_options() 
    ("help,?", "Show Options") 
    ("capture-file,I", po::value<string>(), "Capture File") 
    ("capture-format,F", po::value<string>()->default_value("pcap"), "Capture File Format") 
    ("output-file,O", po::value<string>()->default_value("CONOUT$"), "Output File"); 

po::variables_map vm; 
po::store(po::command_line_parser(ac, av).options(desc)./*positional(pd).*/run(), vm); 

अगर मैं कमांड लाइन पैरामीटर -I hithere यह काम करता है गुजरती हैं, लेकिन यह मैं /I hithere बढ़ावा बढ़ावा का उपयोग कर "के विफल रूपांतरण एक what() के साथ एक boost::bad_any_cast फेंकता पारित :: any_cast "।

क्या / - डिलीमिट किए गए या - - डिलीमिट किए गए विकल्पों को पार्स करने के लिए प्रोग्राम_प्शन का उपयोग करना संभव है? बोनस प्रश्न, क्या इसे कॉन्फ़िगर किया जा सकता है ताकि / और - एक ही विकल्प सेट कर सकें, लेकिन एक-दूसरे के द्विआधारी विरोध हैं? उदाहरण के लिए, /verbose का अर्थ वर्बोज़ लॉगिंग हो सकता है जबकि -verbose का अर्थ कम वर्बोज़ लॉगिंग हो सकता है।

उत्तर

9

/ और - का उपयोग करने के लिए, style_t झंडे के उचित संयोजन के साथ command_line_parser के style() विधि का उपयोग करें। उदाहरण के लिए:

po::store(po::command_line_parser(ac, av) 
    .options(desc) 
    .style(po::command_line_style::default_style 
     | po::command_line_style::case_insensitive 
     | po::command_line_style::allow_slash_for_short 
     | po::command_line_style::allow_long_disguise) 
    /*.positional(pd)*/ 
    .run(), vm); 

(allow_long_disguise की सुविधा देता है / एक लंबे विकल्प शुरू करते हैं।)

आप शायद / और - विपरीत कर सकता है अपनी खुद की additional parser जोड़कर; हालांकि, यह बहुत ही मानक होगा और इसलिए उपयोगकर्ताओं को समाप्त करने में संभावित रूप से भ्रमित होगा, इसलिए मुझे यकीन नहीं है कि यह एक अच्छा विचार है।

+0

तुम शायद सही हो। क्या यह निर्धारित करना संभव है कि 'स्टोर' पर कॉल के बाद कौन सी डिलीमीटर का उपयोग किया गया था? –

+0

जब तक आप अपने स्वयं के अतिरिक्त पार्सर का उपयोग नहीं कर रहे हैं, मुझे ऐसा नहीं लगता है। –

+0

ठीक है, वैसे भी यह एक बोनस सवाल था। :) –

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