2012-08-06 8 views
12

Ich arbeite heute mit einigem Code, und ich sah:Was ist der Zweck von inbue in C++?

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

Dann kam ich in Gesicht imbue. Was ist der Zweck der imbue-Funktion in C++? Was tut es? Gibt es mögliche Probleme bei der Verwendung von imbue (nicht threadsicher, Speicherzuweisung)?

+5

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

+1

Es gibt ein Problem von ostringstream – Dani

+0

@Dani Welches? – cybertextron

Antwort

15

imbue wird von std::ostringstream von std::ios_base geerbt und das Gebietsschema des Streams wird auf das angegebene Gebietsschema festgelegt.

Dies beeinflusst die Art und Weise, wie der Stream bestimmte Dinge druckt (und liest); Wenn Sie beispielsweise ein französisches Gebietsschema festlegen, wird der Dezimalpunkt . durch , ersetzt.

5

C++ - Streams führen ihre Umwandlungen in (und) numerische Typen nach einem locale durch, ein Objekt, das alle benötigten Lokalisierungsinformationen (Dezimaltrennzeichen, Datumsformat, ...) zusammenfasst. Der Standardwert für Streams ist die Verwendung des aktuellen globalen Gebietsschemas. Sie können jedoch mithilfe der Funktion imbue für einen Stream ein benutzerdefiniertes Gebietsschema festlegen, was Ihr Code hier tut - ich nehme an, dass er das Standard-C-Gebietsschema für die aktuelle Ausgabe festlegt Gebietsschemaunabhängiger Text (dies ist zB für Serialisierungszwecke nützlich).