"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > कस्टम स्ट्रीम मैनिपुलेटर्स कैसे बनाएं जो C++ में बाद के आउटपुट को प्रभावित करते हैं?

कस्टम स्ट्रीम मैनिपुलेटर्स कैसे बनाएं जो C++ में बाद के आउटपुट को प्रभावित करते हैं?

2024-11-14 को प्रकाशित
ब्राउज़ करें:735

How to Create Custom Stream Manipulators that Affect Subsequent Outputs in C  ?

सी में बाद के आउटपुट को संशोधित करने के लिए कस्टम स्ट्रीम मैनिपुलेटर्स

सी में, स्ट्रीम मैनिपुलेटर्स इनपुट और आउटपुट संचालन को अनुकूलित करने और बढ़ाने के लिए शक्तिशाली उपकरण हैं। एक सामान्य मैनिपुलेटर 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 { iter_type do_put(iter_type s, ios_base& f, char_type fill, long v) const { रिटर्न num_put::do_put(s, f, fill, v f.iword(geti())); } iter_type do_put(iter_type s, ios_base& f, char_type fill, unsigned long v) const { रिटर्न num_put::do_put(s, f, fill, v f.iword(geti())); } };

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