क्या यह जानने का कोई तरीका है कि निम्न में से कोई कॉल विफल होने पर कौन सी कुंजी शामिल थी?बूस्ट में गायब/गलत कुंजी का बेहतर प्रबंधन :: program_options
boost::program_options::variables_map vm;
...
int foo_bar = vm["some_key"].as<int>();
कुंजी के नक्शे से गायब है, या int करने के लिए परिवर्तनीय नहीं है, तो मैं एक नहीं बल्कि uninformative bad_any_cast मिलता है, और मैं के बाद किसी भी पता नहीं कर सकते हैं:
- कुंजी शामिल
- संग्रहीत मूल्य, या यहां तक कि यदि यह वहां है।
- प्रकार
मैं किसी भी समाधान है कि या तो बढ़ावा हैडर को संशोधित करने या try..catch ब्लॉक में ऊपर के लिए हर कॉल लपेटकर शामिल नहीं करता है की नहीं मिल सकता है शामिल किया गया। मुझे लगता है कि यह एक आम मुद्दा है, इसलिए शायद कोई और बेहतर दृष्टिकोण जानता है।
मेरा मानना है कि प्रलेखन में प्रदान किए गए नमूने आम तौर पर 'if (vm.count (" some_key ")! = 0) का उपयोग करके हर विकल्प की जांच करते हैं, ऐसा लगता है कि इसका उपयोग यह करने के लिए किया गया था। –
प्रत्येक एकल कुंजी को जांचने के बाद आदर्श से कम है, हालांकि, मैं कम वर्बोज़ समाधान में उम्मीद कर रहा था। मैंने देखा कि बूस्ट के हाल के संस्करणों में एक "विकल्प" के रूप में एक विकल्प सेट कर सकता है, इस प्रकार कुंजी अनुपलब्ध होने पर अपवाद उठा सकता है। बेशक यह वैकल्पिक मूल्यों के लिए काम नहीं करेगा, और मुझे अभी भी अमान्य मानों को संभालने की समस्या है –