2012-08-06 18 views
12

मैं आज कुछ कोड के साथ काम कर रहा हूँ, और मैंने देखा:सी ++ में इम्बु का उद्देश्य क्या है?

extern std::locale g_classicLocale; 
class StringStream : public virtual std::ostringstream 
{ 
public: 
     StringStream() { imbue(g_classicLocale); } 
     virtual ~StringStream() {}; 
}; 

तब मैं imbue का सामना करने में आया था। C++ में imbue फ़ंक्शन का उद्देश्य क्या है? यह क्या करता है? imbue (गैर-थ्रेड सुरक्षित, स्मृति आवंटन) का उपयोग करने में कोई संभावित समस्याएं हैं?

+5

http://en.cppreference.com/w/cpp/io/basic_ios/imbue – juanchopanza

+1

ostringstream – Dani

+0

@Dani से प्राप्त करने में कोई समस्या है? – cybertextron

उत्तर

15

imbuestd::ostringstreamstd::ios_base से विरासत में मिला है और यह धारा के लोकेल को निर्दिष्ट लोकेल में सेट करता है।

यह स्ट्रीम प्रिंट (और पढ़ता है) कुछ चीजों को प्रभावित करता है; उदाहरण के लिए, एक फ्रेंच लोकेल सेट करने से दशमलव बिंदु . को , द्वारा प्रतिस्थापित किया जाएगा।

5

सी ++ धाराएं locale के अनुसार (संख्यात्मक) प्रकारों से और उनके रूपांतरणों को निष्पादित करती हैं, जो एक ऐसी वस्तु है जो सभी स्थानीयकरण जानकारी (दशमलव विभाजक, दिनांक प्रारूप, ...) को सारांशित करती है।

धाराओं के लिए डिफ़ॉल्ट मौजूदा वैश्विक वातावरण का उपयोग करने के लिए है, लेकिन आप एक कस्टम स्थान imbue समारोह है, जो कि आपके कोड यहाँ करता है का उपयोग कर एक धारा के लिए सेट कर सकते हैं - मैं इसे डिफ़ॉल्ट सी लोकेल सेट करता है धारा के उत्पादन के लिए लगता लोकेल-स्वतंत्र पाठ (यह उपयोगी है उदाहरण के लिए serialization उद्देश्यों के लिए)।

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