मेरे कार्यक्रम में मैं उन आवेषणों का उपयोग करना चाहता हूं जो एक त्रुटि संदेश दिखाते हैं। इसके अलावा सी और सी के लिए अच्छी तरह से ज्ञात समाधान ++ से वहाँ 'असली' समाधान के रूप में बूस्ट BOOST_ASSERT_MSG(expr, msg)
प्रदान करता है (यह भी assert() with message देखें)गतिशील संदेश के साथ जोर दें?
लेकिन एक स्थिर संदेश मेरे लिए काफी नहीं है, मैं भी कभी कभी विफल रहा है चर दिखाना चाहते हैं, जैसे जैसे
BOOST_ASSERT_MSG(length >= 0, "No positive length found! It is " << length)
एक मामले में आप देख सकते हैं मैं एक stringstream
या ostream
कि के रूप में के रूप में संदेश "स्ट्रिंग" फ़ॉर्मेट करने के लिए मुझे आसानी से कस्टम प्रकार (दिखाए जाने की अनुमति चाहता हूँ करना चाहते हैं यह मानते हुए कि मैं प्रासंगिक परिभाषित किया है फॉर्मेटिंग फ़ंक्शन)।
समस्या यह है कि BOOST_ASSERT_MSG
डिफ़ॉल्ट रूप से char const *
की आवश्यकता है ताकि यह संगत न हो।
क्या assertion_failed_msg()
को फिर से परिभाषित/ओवरलोड करने का कोई तरीका है जिससे संदेश के रूप में स्ट्रीम का उपयोग किया जाएगा? कैसे?
(मेरे अनुभवहीन दृष्टिकोण में विफल रहा है के रूप में संकलक पहले संदेश पर ही एक operator<<("foo",bar)
करना चाहता था ...)
है क्यों 'जबकि (0)'? – WiSaGaN
कृपया देखें http://stackoverflow.com/questions/1067226/c-multi-line-macro-do-while0-vs-scope-block – Greg
यदि आप 'जबकि (0)' का उपयोग करते हैं, तो ';' को छोड़ दें। –