मुझे एक सी ++ कक्षा मिली है जिसे मैं लॉगिंग के लिए उपयोग की जाने वाली स्ट्रीम पकड़ना चाहता हूं।सी ++ स्ट्रीम सदस्य चर के रूप में
स्ट्रीम ऑब्जेक्ट के निर्माण के बाद सेट (और संभवतः रीसेट) करने में सक्षम होना चाहिए।
यह std::cout
के रूप में धारा निर्धारित करना संभव हो सकता है, या एक फ़ाइल धारा के रूप में एक फ़ाइल में लॉग इन करने के लिए, या एक stringstream से अधिक डेटा (एक तरह के /dev/null
) की उपेक्षा कुछ नहीं करता है के रूप में। किसी भी मामले में, यह ostream
प्रकार ऑब्जेक्ट होना चाहिए, जो ऑब्जेक्ट का निर्माता किसी भी समय रीसेट कर सकता है। वर्ग स्वयं कंक्रीट स्ट्रीम प्रकार से अनजान है।
मैं एक ostream के सूचक के साथ यह पूरा कर सकता है, लेकिन फिर एक छोटे से वाक्य रचना कष्टप्रद हो जाता है, deref ऑपरेटर का उपयोग किए:
(*m_log) << "message";
बजाय
m_log << "message";
लेकिन मैं कर सकते हैं संदर्भों का उपयोग नहीं करते हैं, क्योंकि ऑब्जेक्ट प्रारंभ होने के बाद स्ट्रीम ऑब्जेक्ट को संभवतः रीसेट करने की आवश्यकता होती है।
क्या यह हासिल करने का एक शानदार तरीका है, यानी, पॉइंटर्स का उपयोग करने से बचें, लेकिन फिर भी निर्माण के बाद रीसेट करने में सक्षम हो?
पर रहते हैं क्यों आप अपने सिस्टम के लिए एक संदर्भ लौटने एक छोटा सा सदस्य समारोह प्रदान नहीं करते देखा है? रास्ते के साथ कुछ: ostream और mlog() {वापसी * m_log;}। फिर आप लिखेंगे: mlog() << "message"; – fjardon
एक पॉइंटर का उपयोग करें, और अपने कार्य को 'std :: ostream & o = * m_log; 'के साथ शुरू करें। –
@fjardon: आप इसे एक छोटे से उत्तर के रूप में क्यों नहीं प्रदान करते? ; पी – Xeo