আপনি স্টাডআউট বাফারের চারপাশে অন্য একটি মোড়ক তৈরি করতে পারেন:
#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&
।