2012-08-06 8 views
12

Estoy trabajando con un cierto código de hoy, y vi:¿Cuál es el propósito de imbuir en C++?

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

Y vine en la cara de imbue. ¿Cuál es el propósito de la función imbue en C++? ¿Qué hace? ¿Existe algún problema potencial en el uso de imbue (no seguro para subprocesos, asignación de memoria)?

+5

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

+1

Hay un problema derivado de ostringstream – Dani

+0

@Dani ¿Cuál? – cybertextron

Respuesta

15

imbue es heredado por std::ostringstream de std::ios_base y establece la configuración regional de la secuencia en la configuración regional especificada.

Esto afecta la forma en que la secuencia imprime (y lee) ciertas cosas; por ejemplo, establecer una configuración regional francesa hará que el punto decimal . sea reemplazado por ,.

5

Las transmisiones en C++ realizan sus conversiones hacia y desde tipos (numéricos) de acuerdo con locale, que es un objeto que resume toda la información de localización necesaria (separador decimal, formato de fecha, ...).

El valor predeterminado para las secuencias es utilizar la configuración regional actual, pero puede establecer una configuración regional personalizada utilizando la función imbue, que es lo que hace su código aquí - Supongo que está configurando la configuración regional C predeterminada para producir texto independiente de la configuración regional (esto es útil, por ejemplo, para propósitos de serialización).

Cuestiones relacionadas