2012-08-06 11 views
12

今日はいくつかのコードで働いている、と私は見た:C++でのimbueの目的は何ですか?

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::ostringstreamからstd::ios_baseに継承され、ストリームのロケールは指定されたロケールに設定されます。

これは、ストリームが特定のものを印刷(読み込み)する方法に影響します。たとえば、フランス語のロケールを設定すると、小数点.,に置き換えられます。

5

C++ストリームは、必要なすべてのローカライゼーション情報(小数点記号、日付形式など)を要約するオブジェクトであるlocaleに従って、(数値)型との間で変換を実行します。

ストリームのデフォルトは現在のグローバルロケールを使用することですが、imbue関数を使用してストリームにカスタムロケールを設定することができます。これはコードがここで行うことです - 現在のデフォルトロケールを設定すると仮定しますロケールに依存しないテキスト(これは、例えば、シリアライズの目的で便利です)。

関連する問題