最終更新日時: 2017年11月27日 14時01分15秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<ios>

# std::basic_ios::imbue

    locale imbue(const locale& loc);

## 概要

ロケールを設定する。

## 効果

`ios_base::imbue(loc)` を呼び出した後、`rdbuf() != 0` であれば、`rdbuf()->pubimbue(loc)` を呼び出す。

## 戻り値

`ios_base::imbue(loc)` の戻り値

## 備考

`ios_base::imbue()` は仮想関数ではないため、`ios_base` へのポインタや参照経由で `imbue()` を呼び出した場合には本関数ではなく `ios_base::imbue()` が呼び出される。

## 例

    #include <iostream>
    #include <locale>

    int main()
    {
      std::cout.imbue(std::locale::classic());
      std::cout << 1234.5 << '\n';
      std::cout.imbue(std::locale("en_US"));
      std::cout << 1234.5 << '\n';
      std::cout.imbue(std::locale("de_DE"));
      std::cout << 1234.5 << '\n';

      // ios_base への参照経由で呼び出すと、ストリームバッファのロケールは変更されない
      std::ios_base& base = std::cout;
      base.imbue(std::locale::classic());
      std::cout << std::cout.rdbuf()->getloc().name() << '\n';
    }

### 出力例

    1234.5
    1,234.5
    1.234,5
    de_DE

なお、ロケールの名称（ここでは `en_US` と `de_DE`）は環境依存のため、上記の例は動作しないこともある。
その場合でも、ロケールの名称を当該環境で適切なものに変更すれば動作するはずである。
また、2 行目・3 行目の出力はロケール依存のため、たとえこれらのロケールが使用できたとしても上記のようには出力されない可能性もある（が、一般的にはこのように出力される）。

## バージョン

### 言語

- C++98

## 参照

- `ios_base::getloc`
- `ios_base::imbue`
- `basic_streambuf::getloc`
- `basic_streambuf::pubimbue`
- `locale`