समस्या यह है कि std::endl
एक फ़ंक्शन टेम्पलेट है, क्योंकि आपका ऑपरेटर <<
है। तो जब आप लिखें:
my_stream << endl;
आप ऑपरेटर लिए और साथ ही endl
के लिए टेम्प्लेट पैरामीटर निकालना संकलक पसंद करेंगे। यह संभव नहीं है।
तो आपको ऑपरेटर <<
से मैनिपुलेटर्स के साथ काम करने के अतिरिक्त, गैर टेम्पलेट, अधिभार लिखना होगा। उनके प्रोटोटाइप दिखेगा की तरह:
UIStream& operator<<(UIStream& os, std::ostream& (*pf)(std::ostream&));
(वहाँ दो अन्य लोगों, std::basic_ios<char>
और std::ios_base
, आप भी है जो अगर आप सभी manipulators अनुमति देना चाहते हैं प्रदान करने के लिए द्वारा std::ostream
की जगह कर रहे हैं) और उनके कार्यान्वयन बहुत के समान होगा में से एक आपके टेम्पलेट्स में से एक है। वास्तव में, बहुत समान आप अपने टेम्पलेट कार्यान्वयन इस तरह के लिए उपयोग कर सकते हैं कि:
typedef std::ostream& (*ostream_manipulator)(std::ostream&);
UIStream& operator<<(UIStream& os, ostream_manipulator pf)
{
return operator<< <ostream_manipulator> (os, pf);
}
एक अंतिम टिप्पणी अक्सर एक कस्टम streambuf
है लेखन अक्सर लिए एक बेहतर तरीका प्राप्त एक तकनीक के लिए आवेदन प्राप्त करने का प्रयास क्या, आप का उपयोग कर रहे हैं।
UIStream बारे में कुछ भी जानने के बिना, यह थोड़ा मुश्किल टिप्पणी करने के लिए है। –
और फिर भी, आपको एक रास्ता मिला। :) – notJim