Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル: RWLocale

バナーをクリックすれば目次に戻ります

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.

## RWLocale

### 形式

      #include <locale.h>
      #include <rw/locale.h>

      (抽象基底クラス)

### 説明

  このクラスは抽象基底クラスです。日付 (曜日と月名を含む)、時刻、数 (桁のグループを含む) および通貨のフォーマットを文字列との間で行うインタフェースを定義します。

  このクラスは抽象基底クラスなので、実際の処理は行いません。ここでは、RWLocale から派生したクラスの動作のモデルを説明しているだけです。

  RWLocale オブジェクトを使用するには、次の 3 つの方法があります。

  - `RWDate::asString()` などの RWLocale オブジェクトを待っている関数にそれを渡します。
  - 静的メンバー関数 `RWLocale::global()` を使用して、「大域的な」ロケールを指定します。このロケールは、ロケールを使用する関数に対してデフォルト引数として渡されます。
  - `operator<<()` を使用して RWDate または RWTime をストリームに書き込むときに自動的に適切にフォーマットされるように、ストリームに RWLocale オブジェクトを「吹き込み」ます。

  RWLocale の実装として、ライブラリには次の 2 つがあります。

  - クラス RWLocaleSnapshot は、標準 C ライブラリロケール機能をカプセル化するもので、さらに 2 つの長所があります。1 つは、同時に複数のロケールを使用できること、もう 1 つは文字列から他の型への変換をサポートしていることです。
  - `RWLocaleSnapshot("C")` とそっくり同じ内部クラスもあります。コンパイラがロケールのサポートを内蔵していない場合、プログラム起動時に自動的に 1 つを作成し、`RWLocale::global()` のデフォルト値として使用します。コンパイラがロケールをサポートする場合、`RWLocale::global()` は `RWLocaleSnapshot("C")` のインスタンスへの `const` 参照を返します。

### 接続性

  なし

### 列挙型

      enum
      CurrSymbol { NONE, LOCAL, INTL };

    通貨をフォーマットする際、通貨記号をまったく使用しないか、現地の通貨記号を使用するか、あるいは国際通貨記号を使用するかを制御します。

### 公開メンバー関数

      virtual RWCString
      asString(long) const = 0;
      virtual RWCString
      asString(unsigned long) const = 0;

    数を `"3,456"` などの文字列に変換します。

      virtual RWCString
      asString(double f, int precision = 6,
      RWBoolean showpoint = 0) const = 0;

    `double f` を文字列に変換します。変数 `precision` は、小数点の後の桁数。`showpoint` が `TRUE` ならば、精度には関係なく小数点を生成します。

      virtual RWCString
      asString(const struct tm* tmbuf,char format,
      const RWZone& zone) const = 0;

    書式指定文字に応じて、struct tm オブジェクトの各要素を文字列に変換します。書式指定文字の意味は、標準 C ライブラリ関数 `strftime()` に使用される意味と同じです。struct tm の各メンバーは、互いに矛盾なく設定されているものとみなされます。

    `strftime()` の書式指定文字の要約については、表 2-1 を参照してください。

      RWCString
      asString(const struct tm* tmbuf,const char* format,
               const RWZone& zone) const;

    書式指定文字列に応じて、struct tm オブジェクトの各要素を文字列に変換します。書式指定文字列の各文字の前に `%` が必要です。`%` が前に付いていない文字は変更されずに返される通常の文字として扱われます。`%` 文字そのものは `%%` で表します。書式指定文字の意味は、標準 C ライブラリ関数 `strftime()` に使用される意味と同じです。struct tm の各メンバーは、互いに矛盾なく設定されているものとみなされます。

    `strftime()` の書式指定文字の要約については、表 2-1 を参照してください。この関数は、以前のライブラリバージョンとリンクの互換性を保つために、仮想関数ではありません。

      virtual RWCString
      moneyAsString(double value,
                                enum CurrSymbol = LOCAL) const = 0;

    ロケールの通貨規約に応じてフォーマットした `value` 引数を含む文字列を返します。`value` 引数は、通貨の単位の整数倍を含んでいるものとみなされます。たとえば、US ロケールの `moneyAsString(1000., RWLocale::LOCAL)` は `"$10.00"` を表します。`CurrSymbol` 引数は、`"$"` などの現地の通貨記号を使用するか、`"USD"` などの国際的な通貨記号を使用するか、あるいは記号をまったく使用しないかのいずれかを決定します。

      virtual int
      monthIndex(const RWCString&) const = 0;

    引数を、月名のフルスペルまたは省略形として解釈し、1 月から 12 月までを表す 1 から 12 の数値を返します。エラーがあれば、0 を返します。先頭の空白は無視されます。

      virtual RWBoolean
      stringToNum(const RWCString&, double* fp) const = 0;

    RWCString 引数を浮動小数点数に変換します。省略可能な符号の前後や最後の空白はあっても構いません。整数部に桁区切り文字を置くことができます。有効な数であれば `TRUE` を、無効であれば `FALSE` を返します。`FALSE` の場合、`double*` 引数は利用されません。有効な数値文字列はすべて受け入れられますが、それ以外の文字列は拒否されます。次に、英語のロケールでの有効な数値文字列の例を挙げます。

           "1"          " -02. "     ".3"
           "1234.56"    "1e10"       "+ 19,876.2E+20"

      virtual RWBoolean
      stringToNum(const RWCString&, long* ip) const = 0;

    RWCstring 引数を整数に変換します。省略可能な符号の前後や最後の空白はあっても構いません。桁区切り文字を置くことができます。有効な整数であれば `TRUE` を、無効であれば `FALSE` を返します。`FALSE` の場合、`long*` 引数は利用されません。有効な数値文字列はすべて受け入れられますが、それ以外の文字列は拒否されます。次に、英語のロケールでの有効な整数文字列の例を挙げます。

           "1"           " -02. "     "+ 1,234"
           "1234545"     "1,234,567"

    #### 表 2-1 `strftime()` が使用する書式指定文字

    `strftime()` が使用する書式指定文字を挙げます。例は、括弧内に示してあります。`struct` `tm` の全メンバーを使用しない形式については、実際に使用するメンバーだけを角括弧内に示しています。
    フォーマット文字 | 意味 | 例
    --- | --- | ---
    `a` | 曜日名の省略形 [`tm::tm_wday`] | `Sun`
    `A` | 曜日名 [`tm::tm_wday`] | `Sunday`
    `b` | 月名の省略形 | `Feb`
    `B` | 月名 | `February`
    `c` | 日付と時刻 [全メンバーを使用可能] | Feb 29 14:34:56 1984
    `d` | 月の通し日 | `29`
    `H` | 24 時間単位の時刻 | `14`
    `I` | 12 時間単位の時刻 | `02`
    `j` | 年の通し日 (001 から) [`tm::tm_yday`] | `60`
    `m` | 月番号 (01 から) | `02`
    `M` | 分 | `34`
    `p` | 午前・午後の印 (存在する場合) | `AM`
    `S` | 秒 | `56`
    `U` | 日曜を先頭にした週の通し番号 (00 から) [`tm::tm_yday` と `tm::tm_wday`] |
    `w` | 曜日 (日曜を 0) | `0`
    `W` | 月曜を先頭にした週の通し番号 (00 から) [`tm::tm_yday` と `tm::tm_wday`] |
    `x` | 日付 [ロケールによって `tm::tm_yday` を使用] | `Feb 29 1984`
    `X` | 時刻 | `14:34:56`
    `y` | 世紀の通し年 (0 から) | `84`
    `Y` | 年 | `1984`
    `Z` (大文字) | タイムゾーン名 [`tm::tm_isdst`] | `PST` または `PDT`

      virtual RWBoolean
      stringToDate(const RWCString&, struct tm*) const = 0;

    RWCString 引数を日付に変換し、そこから月、日、年の各要素を struct tm 引数に与えます。日付が有効であれば `TRUE` を、無効であれば `FALSE` を返します。`FALSE` の場合、struct tm 引数は使用されません。`TRUE` であれば、`tm_mday`、`tm_mon`、`tm_year` に設定されます。日付が 3 個の数で入力されれば、予想される順序は `strftime()` の場合と同じです。この関数は、間違った日付文字列すべてを検出することはできないので注意してください。

      次に、英語のロケールでの有効な日付文字列の例を挙げます。

             "Jan 9, 62"     "1/9/62"     "January 9 1962"
             "09Jan62"       "010962"

        virtual RWBoolean
        stringToTime(const RWCString&, struct tm*) const = 0;

    RWCString 引数を時、分、およびオプションの秒から成る時刻に変換します。時が 1 〜 12 の範囲であれば、"AM" と "PM" も使用できます。時刻文字列が有効であれば `TRUE` を、無効であれば `FALSE` を返します。`FALSE` の場合、`struct tm` 引数は使用されません。`TRUE` であれば、`tm_hour`、`tm_min`、`tm_sec` に設定されます。この関数は、間違った時刻文字列をすべて検出することはできません。次に、英語のロケールでの有効な時刻文字列の例を挙げます。

           "1:10 AM"     "13:45:30"     "12.30.45pm"
           "PM 3:15"     "1430"
      virtual RWBoolean
      stringToMoney(const RWCString&, double*,
                    RWLocale::CurrSymbol=LOCAL) const = 0;

    RWCString 引数を通貨の値に変換します。通貨記号があっても無視します。負数は、負記号を付けるか括弧で囲むことによって指定できます。桁区切り子は省略可能で、指定されていれば検査されます。通貨の値が有効であれば `TRUE` を、無効であれば `FALSE` を返します。`FALSE` の場合、`double*` 引数は使用されません。`TRUE` であれば、通貨の単位の整数倍に設定されます (米国ロケールのセントなど)。

      const RWLocale*
      imbue(ios& stream) const;

    自分自身を `stream` 引数にインストールし、後で演算子 `<<` と `>>` で使用します (RWDate や RWTime など)。ポインタは、ストリームから静的メンバー `RWLocale::of()` を使用して取り出すことができます。このようにロケールは、数多くのレベルの制御を通じて透過的に引き渡すことができ、必要な場所で他に影響を与えずに使用できます。

      virtual int
      weekdayIndex(const RWCString&) const = 0;

    RWCString を週の曜日に変換して、1 から 7 の範囲の整数を返します。1 は月曜日に相当します。エラーがあれば、0 を返します。

### 静的公開メンバー関数

      static const RWLocale&
      of(ios&);

    前回 `RWLocale::imbue()` を呼び出したとき `stream` 引数にインストールしたロケールを返します。インストールしていなければ、`RWlocale::global()` の結果を返します。

      static const RWLocale*
      global(const RWLocale* loc);

    大域的なデフォルトロケールのオブジェクトを `loc` に設定し、前のオブジェクトを返します。このオブジェクトは、デフォルトロケールとして RWDate と RWTime 文字列変換関数が使用します。最初は `RWLocaleSnapshot("C")` の機能を提供するクラスのインスタンスを参照するように設定されます。

      static const RWLocale&
      global();

    現在の大域的なデフォルトのロケールに対する参照を返します。

      const RWLocale*
      defaultLocale();

    `RWLocaleSnapshot("C")`、または、標準 C ロケールをすべてはサポートしないコンパイラと同じ動作を提供する別のクラスの新しいインスタンスへのポインタを返します。