2011-11-15 8 views
5

क्या 'असली' प्रोग्राम विकल्प से सहायता-विकल्प को अलग करने का कोई आसान तरीका है? वास्तव में, यह विकल्पों में से एक पदानुक्रम, एक ला BNF परिभाषित करना संभव है:boost program_options: मदद बनाम सार्थक विकल्प

options := help_options | program_options 
help_options := '-h' 
program_options := '-m1' mode1options | '-m2' mode2options 
mode1options := number 
... 

या वहां इस लक्ष्य को हासिल करने के लिए एक बेहतर तरीका है? क्या मुझे आत्मा में वापस जाना चाहिए?

उत्तर

7

प्रलेखन वर्णन करता है कि Option Groups and Hidden Options शीर्षक के तहत विकल्पों को अलग कैसे करें। यह कई options_description वस्तुओं को परिभाषित करने और फिर कमांड लाइन पार्स करने के लिए एक all समूह का उपयोग दर्शाता है, लेकिन प्रदर्शित प्रलेखन के लिए एक visible समूह:

// Declare an options description instance which will include 
// all the options 
options_description all("Allowed options"); 
all.add(general).add(gui).add(backend); 

// Declare an options description instance which will be shown 
// to the user 
options_description visible("Allowed options"); 
visible.add(general).add(gui); 

variables_map vm; 
store(parse_command_line(ac, av, all), vm); 

if (vm.count("help")) 
{ 
    cout << visible; 
    return 0; 
} 

हालांकि Program_options पुस्तकालय आप वाक्य रचना के कुछ अनुकूलित करने देता है (Non-conventional Syntax और Custom Validators देखें) , यह एक कस्टम व्याकरण को परिभाषित करने का एक तरीका प्रदान नहीं करता है। यदि आप कमांड लाइन के व्याकरण को परिभाषित करना चाहते हैं, तो एक अलग टूल का उपयोग करें।

+0

धन्यवाद! किसी भी तरह से मैंने इस पर कैसे पढ़ा ... – xtofl

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