मैं जोड़ने के लिए है कि मैं धारा को '\n'
लिखने के अर्थ लगता है कि तीसरे पक्ष के पुस्तकालयों में std::endl
/std::flush
लिखने से अलग हो सकते हैं करना चाहते हैं।
उदाहरण के लिए, मैं वर्तमान प्रोजेक्ट में ओस्ट्रीम-आधारित लॉगर का उपयोग कर रहा हूं। वह लॉगर आउटपुट स्वरूपण के लिए std::stringstream
कार्यक्षमता का उपयोग करता है, लेकिन फ्लशिंग के लिए मैनिपुलेटर्स को ओवरराइड किया गया है। यह कोड को फ्लश करने और सरल बनाने के बिना '\n'
को लॉग में लिखने की अनुमति देता है।
class MyStream
{
// [cut]
std::stringstream m_buffer;
// [cut]
};
// friends:
template <typename Printable>
MyStream& operator<<(MyStream& stream, const Printable& value)
{
stream.m_buffer << value;
}
typedef decltype(std::flush) TManipulator;
template <>
MyStream& operator<<(MyStream& stream, const TManipulator& manipulator)
{
if (manipulator == std::flush || manipulator == std::endl)
stream.sendLogLine();
else
stream.m_buffer << manipulator;
}
// usage sample
void main()
{
getLoggerStream() << "hello" << std::endl;
}
पी.एस.:
यहाँ एक स्यूडोकोड नमूना है मैं std::stringstream
उपclass नहीं करना चाहता था, इसलिए MyStream एक एडाप्टर है। अगर मैं '\n'
फ्लशिंग करना चाहता हूं तो मुझे char*
, std::string
और अन्य विशेषज्ञताओं सहित अधिक कार्यक्षमता को दोबारा कार्यान्वित करना चाहिए।
स्रोत
2012-03-11 00:51:10
क्या आपने इसे मापने की कोशिश की? –
हां, यह एक कार्यान्वयन विस्तार है, इसलिए आपको एक निश्चित उत्तर नहीं मिलेगा। मेरा अनुमान है कि यह अधिकांश कार्यान्वयन में एक फर्क पड़ता है, लेकिन यह सच नहीं होना चाहिए। –
@ करल - मान लीजिए, मैंने नहीं किया, मैं यह भी नहीं जानता कि कैसे करें। मैं किताब पढ़ रहा था और मैं उत्सुक था, इसलिए मैंने सोचा कि मैं पूछूंगा। –