आप स्टडआउट बफर के आसपास एक और आवरण बना सकते हैं:
#include <iostream>
#include <iomanip>
int main() {
int x = 76;
std::ostream hexcout (std::cout.rdbuf());
hexcout << std::hex;
std::cout << x << "\n"; // still "76"
hexcout << x << "\n"; // "4c"
}
एक समारोह में:
void print(std::ostream& os) {
std::ostream copy (os.rdbuf());
copy << std::hex;
copy << 123;
}
बेशक अगर प्रदर्शन एक मुद्दा है तो यह थोड़ा अधिक महंगा है क्योंकि यह पूरी ios
वस्तु (लेकिन बफर नहीं) की नकल कर रहा है, जिसमें कुछ ऐसे सामान भी शामिल हैं जिनके लिए आप भुगतान कर रहे हैं, लेकिन लोकेल जैसे उपयोग करने की संभावना नहीं है।
अन्यथा मुझे ऐसा लगता है कि यदि आप .flags()
इसका उपयोग करने जा रहे हैं तो यह सुसंगत होने के .setf()
साथ-साथ <<
वाक्य रचना (शैली का शुद्ध प्रश्न) के बजाय बेहतर है ।
void print(std::ostream& os) {
std::ios::fmtflags os_flags (os.flags());
os.setf(std::ios::hex);
os << 123;
os.flags(os_flags);
}
के रूप में अन्य लोगों ने कहा कि आप ऊपर (और रख सकते हैं .precision()
और .fill()
वातावरण और शब्दों से संबंधित सामान नहीं है कि आम तौर पर संशोधित किया जा करने के लिए नहीं जा रहा है और भारी है, लेकिन आम तौर पर) एक वर्ग में सुविधा के लिए है और यह अपवाद-सुरक्षित बनाने के लिए; निर्माता को स्वीकार करना चाहिए std::ios&
।