2011-10-11 27 views
10

क्या किसी को पता है कि दृश्यमान आउटपुट मुद्रित करने के लिए सभी cout << फ़ंक्शंस को टॉगल करने की कोई चाल है या नहीं? मैं एक और डेमो को एक साथ रखने के लिए मेरे और कुछ अन्य लोगों द्वारा लिखे गए कुछ कोड को एक साथ हैक करने की कोशिश कर रहा हूं। मैं आउटपुट को किसी फ़ाइल में रीडायरेक्ट नहीं करना चाहूंगा और एक ऐसा समाधान चाहूंगा जिसमें विंडोज और लिनक्स के बीच कुछ संगतता हो।प्रोग्रामेटिक रूप से अनदेखा करें

मेरे परिदृश्य में मेरे पास विभिन्न #defines नियंत्रण के साथ कोड की कई पंक्तियां हैं, जब कुछ विधियां डीबग आउटपुट उत्पन्न करती हैं। मैं कुछ कॉल करना चाहता हूं:

cout.off(); 
driverForAffectA(); 
driverForAffectB(); 
cout.on(); 
printSpecializedDebug(); 
exit(0); 
+0

ठीक है, आप हमेशा अपने आउटपुट को फ़ाइल या dev/null पर रीडायरेक्ट कर सकते हैं! – AraK

उत्तर

16

आप कोउट के स्ट्रीम बफर को बदल सकते हैं।

streambuf *old = cout.rdbuf(); 
cout.rdbuf(0); 
cout << "Hidden text!\n"; 
cout.rdbuf(old); 
cout << "Visible text!\n"; 

संपादित करें:

जॉन उदासी 'टिप्पणी के लिए धन्यवाद आप कोड थोड़ा छोटा कर सकते हैं:

streambuf *old = cout.rdbuf(0); 
cout << "Hidden text!\n"; 
cout.rdbuf(old); 
cout << "Visible text!\n"; 
+4

यहां तक ​​कि बेहतर, 'rdbuf (streambuf *) 'पुराना बफर देता है, इसलिए आपको पुराने को पाने और एक नया सेट करने के लिए अलग-अलग कॉल की भी आवश्यकता नहीं है। –

+0

@ जॉन फ्लैटनेस: ओह धन्यवाद मैंने दस्तावेज़ों में ध्यान नहीं दिया। मेरा जवाब तय किया। – GWW

1

क्यों ठीक आप नहीं उत्पादन रीडायरेक्ट करना चाहते हैं? यदि ऐसा इसलिए है क्योंकि अन्य आउटपुट है जिसे आप रखना चाहते हैं, तो आप भाग्य से बाहर हो सकते हैं।

यदि ऐसा है तो आपको डेमो में टर्मिनल पर एक जटिल खोल अभिव्यक्ति टाइप करने की आवश्यकता नहीं है, तो मैं एक प्रारंभ स्क्रिप्ट बनाने और अंदर रीडायरेक्ट करने का सुझाव देता हूं।

कि, या मुख्य के शीर्ष के पास /dev/null पर stdout फिर से खोलें।

संबंधित मुद्दे