मैं अगर मैं क्या लिख रहा हूँ समझ में आता है पता नहीं है, लेकिन मुझे याद मैंने देखा कि एक समारोह इस तरह ivoked:स्ट्रिंगस्ट्रीम को फ़ंक्शन पैरामीटर के रूप में पास करना संभव है?
my_func(ss << "text" << hex << 33);
क्या यह संभव है?
मैं अगर मैं क्या लिख रहा हूँ समझ में आता है पता नहीं है, लेकिन मुझे याद मैंने देखा कि एक समारोह इस तरह ivoked:स्ट्रिंगस्ट्रीम को फ़ंक्शन पैरामीटर के रूप में पास करना संभव है?
my_func(ss << "text" << hex << 33);
क्या यह संभव है?
निश्चित बात। ऐसा क्यों नहीं होगा? उदाहरण के लिए इस तरह के समारोह की घोषणा:
void my_func(std::ostringstream& ss);
धन्यवाद, जो मुझे याद आया, मुझे पता था कि यह कुछ हद तक संभव है लेकिन मुझे नहीं पता था कि – rsk82
उस प्रभाव को प्राप्त करने के लिए घोषणा का उपयोग किस प्रकार किया गया है इसके अलावा 'एसएस << "परीक्षण" << हेक्स << 33' का प्रकार नहीं है 'std :: stringstream &', लेकिन 'std :: ostream &', और वह दिए गए हस्ताक्षर से मेल नहीं खाएगा। –
@ जेम्स कानज़ यह बिल्कुल सही है। –
बिल्कुल! सुनिश्चित करें कि आप संदर्भ द्वारा इसे पास करते हैं, मूल्य से नहीं।
void my_func(ostream& stream) {
stream << "Hello!";
}
हाँ, यह है, और
Function(expresion)
देगा अभिव्यक्ति पहले मूल्यांकन किया जाना है और इसका परिणाम एक पैरामीटर
नोट के रूप में पारित हो जाएगा: Operator << for ostreams एक ostream रिटर्न
my_func
की लाइनों के साथ हस्ताक्षर होना चाहिए:
void my_func(std::ostream& s);
, क्योंकि यह ss << "text" << hex << 33
का प्रकार है। लक्ष्य है उत्पन्न स्ट्रिंग को निकालने के लिए, की तरह कुछ करने के लिए you'ld: है कि आप एक अस्थायी धारा उपयोग नहीं कर सकते भी
void
my_func(std::ostream& s)
{
std::string data = dynamic_cast<std::ostringstream&>(s).str();
// ...
}
नोट;
my_func(std::ostringstream() << "text" << hex << 33);
संकलित नहीं होगा (शायद वीसी ++ के साथ), क्योंकि यह कानूनी सी ++ नहीं है। आप की तरह कुछ लिख सकते हैं:
my_func(std::ostringstream().flush() << "text" << hex << 33);
अगर आप एक अस्थायी उपयोग करना चाहता था। लेकिन यह बहुत उपयोगकर्ता के अनुकूल नहीं है।
इसे आजमाने के लिए मुश्किल नहीं होना चाहिए? – aztaroth