सी में बाद के आउटपुट को संशोधित करने के लिए कस्टम स्ट्रीम मैनिपुलेटर्स
सी में, स्ट्रीम मैनिपुलेटर्स इनपुट और आउटपुट संचालन को अनुकूलित करने और बढ़ाने के लिए शक्तिशाली उपकरण हैं। एक सामान्य मैनिपुलेटर std::hex है, जो बाद के संख्यात्मक आउटपुट के प्रारूप को हेक्साडेसिमल में संशोधित करता है। कि इसके बाद आओ? यह आलेख बताता है कि इस तरह का मैनिपुलेटर कैसे बनाया जाए और एक सरल उदाहरण के साथ इसके उपयोग के मामले को प्रदर्शित किया जाए।
स्टेट स्टोरेज के साथ कस्टम मैनिपुलेटर्सस्ट्रीम पर बाद के आइटम को संशोधित करने के लिए, आपको प्रत्येक स्ट्रीम से जुड़ी राज्य की जानकारी संग्रहीत करने की आवश्यकता है। इसे ios_base::iword फ़ंक्शन और xalloc द्वारा उत्पन्न इंडेक्स का उपयोग करके प्राप्त किया जा सकता है।
inline int geti() { स्थिर int i = ios_base::xalloc(); वापसी मैं; }
inline int geti() { static int i = ios_base::xalloc(); return i; }
ostream& add_one(ostream& os) { os.iword(geti()) = 1; वापसी ओएस; } ओस्ट्रीम& add_none(ostream& os) { os.iword(geti()) = 0; वापसी ओएस; }
ostream& add_one(ostream& os) { os.iword(geti()) = 1; return os; } ostream& add_none(ostream& os) { os.iword(geti()) = 0; return os; }संख्यात्मक आउटपुट को अनुकूलित करना
सी में संख्यात्मक आउटपुट को पहलुओं द्वारा नियंत्रित किया जाता है। संख्यात्मक आउटपुट के व्यवहार को संशोधित करने के लिए, आप एक कस्टम पहलू को परिभाषित कर सकते हैं। यहां, हम my_num_put नामक एक कस्टम पहलू बनाते हैं जो प्रत्येक संख्यात्मक मान को संग्रहीत स्थिति मान से बढ़ाता है।
struct my_num_put : num_put
ostream& add_one(ostream& os) { os.iword(geti()) = 1; return os; } ostream& add_none(ostream& os) { os.iword(geti()) = 0; return os; }मैनिपुलेटर का परीक्षण
कस्टम मैनिपुलेटर का परीक्षण करने के लिए, आप आउटपुट स्ट्रीम को नए पहलू से जोड़ सकते हैं और संख्यात्मक आउटपुट को संशोधित करने के लिए मैनिपुलेटर्स का उपयोग कर सकते हैं।
मुख्य प्रवेश बिंदु() { // आउटपुट: 11121011 cout.imbue(locale(locale(), new my_num_put)); कोउट
int main() { // outputs: 11121011 cout.imbue(locale(locale(), new my_num_put)); cout << add_one << 10 << 11 << add_none << 10 << 11; }
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3