से एक std :: ostream प्राप्त करें, मैं किसी निश्चित प्रोग्राम स्थिति के आधार पर std::cout
या std::ofstream
ऑब्जेक्ट पर std::ostream
कैसे बांधूं?std :: cout या std :: ofstream (file)
std::ostream out = condition ? &std::cout : std::ofstream(filename);
मैं कुछ उदाहरण दिए गए अपवाद-सुरक्षित नहीं हैं, http://www2.roguewave.com/support/docs/sourcepro/edition9/html/stdlibug/34-2.html से इस तरह के रूप में एक देखा है: यह कई कारणों से अमान्य है, मैं कुछ है कि अर्थ की दृष्टि से निम्नलिखित के बराबर है प्राप्त करने के लिए चाहते हैं हालांकि
int main(int argc, char *argv[])
{
std::ostream* fp; //1
if (argc > 1)
fp = new std::ofstream(argv[1]); //2
else
fp = &std::cout //3
*fp << "Hello world!" << std::endl; //4
if (fp!=&std::cout)
delete fp;
}
क्या कोई बेहतर, अपवाद-सुरक्षित समाधान जानता है?
ओह, मुझे std :: streambuf * std :: ostream * – Tom
से बेहतर पसंद है, लेकिन अगर कुछ फेंकता है, तो आपको अब नष्ट किए गए स्ट्रीम के अपने स्ट्रीमबफ * के कोउट में एक खतरनाक पॉइंटर के साथ छोड़ा जाएगा। तो सावधान रहें, एक RAII विधि बेहतर लिखो। –
मुझे hdacking std :: cout पसंद नहीं है। इसका मतलब है कि कोउट और प्रिंटफ अब समकक्ष नहीं हैं, जो कुछ ऐसा है जो मुझे लगता है कि बहुत से डेवलपर्स को मंजूरी मिलती है। – Tom