मैं वर्तमान में एक std::stringstream
के लिए एक आवरण लिख रहा हूँ और मैं सभी operator<<
std::stringstream
को मेरी कक्षा के माध्यम से कॉल अग्रेषित करना चाहते हैं के साथ endl। यह अभी ठीक है (इस प्रश्न के लिए धन्यवाद: wrapper class for STL stream: forward operator<< calls), लेकिन इसके साथ अभी भी एक मुद्दा है।सी ++ iostream के लिए आवरण वर्ग, एसटीडी की तरह उपयोग धारा संशोधक :: ऑपरेटर <<
चलो कहते हैं कि मैं निम्नलिखित कोड डालें:
class StreamWrapper {
private:
std::stringstream buffer;
public:
template<typename T>
void write(T &t);
template<typename T>
friend StreamWrapper& operator<<(StreamWrapper& o, T const& t);
// other stuff ...
};
template<typename T>
StreamWrapper& operator<<(StreamWrapper& o, T const& t) {
o.write(t);
return o;
}
template<typename T>
void StreamWrapper::write(T& t) {
// other stuff ...
buffer << t;
// other stuff ...
}
मैं अब ऐसा करते हैं तो:
StreamWrapper wrapper;
wrapper << "text" << 15 << "stuff";
यह सिर्फ ठीक काम करता है। लेकिन अगर मैं std::endl
जैसे धारा संशोधक का उपयोग करना चाहता हूं, जो http://www.cplusplus.com/reference/ios/endl के अनुसार एक फ़ंक्शन है, तो मैं बस संकलित नहीं करता हूं।
StreamWrapper wrapper;
wrapper << "text" << 15 << "stuff" << std::endl;
क्यों? मैं स्ट्रीम संशोधक को भी कैसे अग्रेषित कर सकता हूं?
संकलन त्रुटि क्या है? –
'ऑपरेटर <<' का ओवरलोड होता है जो फ़ंक्शन लेता है, और उसके बाद उस फ़ंक्शन को स्ट्रीम पर कॉल करता है: http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt http: //en.cppreference .com/w/cpp/io/manip – BoBTFish