2013-05-14 6 views
5

मैं बूस्ट उपयोग कर रहा हूँ :: Program_options मेरे आदेश पंक्ति पार्स और निम्नलिखित के रूप में ट्यूटोरियल से कुछ कोड अनुकूलित करने के लिए:Boost.Program_options के साथ कोई तर्क डिफ़ॉल्ट व्यवहार नहीं है?

try { 
    po::options_description desc("Allowed options"); 

    desc.add_options() 
     ("help,h", "output help message") 
     ("width,w", po::value<int>()->required(), " width") 
    ; 

    po::positional_options_description p; 
    p.add("width", 1); 

    po::variables_map vm; 
    po::store(po::command_line_parser(argc, argv). 
       options(desc).positional(p).run(), vm); 

    if (vm.count("help")) { 
     std::cout << "USAGE: " << av[0] << &p << std::endl; 
     return 0; 
    } 

    po::notify(vm); 

    if (vm.count("width")) { 
     std::cout << "width: " << vm["width"].as<int>() << "\n"; 
    } 
} catch (std::exception& e) { 
    std::cout << e.what() << std::endl; 
    return 1; 
} catch (...) { 
    std::cout << "Exception of unknown type!" << std::endl; 
} 

मैं मदद दिखाने के लिए जब कोई तर्क पारित कर रहे हैं चाहते हैं, लेकिन मैं एक नहीं मिला था argc पर भरोसा किए बिना तर्कों की कुल संख्या variables_map प्राप्त करने का तरीका।

उत्तर

4

argc यहां जाने का तरीका है, program_options यह खुलासा नहीं करता कि कितने विकल्प सेट किए गए हैं। Overengineer मत करो।

+0

आप सही हैं, यह इंजीनियरिंग खत्म हो गया है – kittikun

9

मैं

if (vm.count("help") || argc == 1) { 

का उपयोग किया है के बाद से argc हमेशा कम से कम, इस कार्यक्रम का नाम है कोई तर्क के साथ इसे चलाने मदद को प्रदर्शित करेगा।

दोह ... कभी नहीं। यह सुनिश्चित नहीं है कि मैं इस तथ्य को कैसे याद करता हूं कि आप विशेष रूप से इस समाधान को नहीं चाहते थे।

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