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

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

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

## RWFactory

### 形式

      typedef unsigned short  RWClassID;
      typedef RWCollectable*  (*RWuserCreator)();
      #include <rw/factory.h>

      RWFactory* theFactory;

### 説明

  このクラスは、クラス ID を与えられると、RWCollectable オブジェクトのインスタンスを作成します。これは、クラス ID と関連 "クリエータ関数" から成るテーブルによって実行されます。クリエータ関数は次のようなプロトタイプを持っています。

          RWCollectable*  aCreatorFunction();

  上記の関数は、特定のクラスのインスタンスを作成します。与えられた `RWClassID` タグに対し適切な関数を選択して呼び出し、結果のポインタを返します。このようにして作成されたオブジェクトはすべてヒープから作成されるので、作業終了後はユーザーがオブジェクトを削除しなければなりません。

  `getRWFactory` を使用してアクセスできる独特な大域的 RWFactory があります。これは、プログラムが参照するすべてのクラスに対するクリエータ関数を持っていると保証されています。詳細については、ユーザーズガイドの RWFactory の説明を参照してください。

### 持続性

  なし

### 例

      #include <rw/factory.h>
      #include <rw/rwbag.h>
      #include <rw/colldate.h>
      #include <rw/rstream.h>

      main(){
       // クラス ID __RWBAG を使用して、ヒープから新しい RWBag を作成する

       RWBag* b = (RWBag*)rwCreateFromFactory(__RWBAG);

       b->insert( new RWCollectableDate ); // 今日の日付を挿入する
       // ...
       b->clearAndDestroy();     // cleanup: 最初にメンバーを削除する
       delete b;                 // 次に bag 自身を削除する
      }
      END FILE

### 公開コンストラクタ

      RWFactory();

    RWFactory を作成します。

### 公開演算子

      RWBoolean
      operator<=(const RWFactory& h);

  自分自身が `h` の部分集合である場合、つまり、自分自身のすべての要素について、`h` 内に `isEqual` である要素がある場合に `TRUE` を返します。この演算子は、C++ 言語における非一貫性を修正するために取り込まれます。標準 C++ ライブラリ実装を使用してコンパイルしないかぎり、これは存在しません。通常は RWSet から継承されます。

  > 注 - 標準 C++ ライブラリが存在する状態で RWFactory から継承する場合、この演算子を変更し、関数を明示的に呼び出すことをお薦めします。C++ の多重定義による解決方法では、継承されたクラスメンバーを対象とする、標準ライブラリが提供する大域演算子を選択します。これらの大域定義は、部分集合関係のような半順序付けには適していません。

### 公開メンバー関数

      void
      addFunction(RWuserCreator uc, RWClassID id);

    RWFactory に大域関数 `uc` を追加します。この関数は `RWClassID id` を持つオブジェクトのインスタンスを作成します。

      void
      addFunction(RWuserCreator uc, RWClassID id, RWStringID sid);

    RWFactory に大域関数 `uc` を追加します。この関数は `RWClassID id` と `RWStringID sid` を持つオブジェクトのインスタンスを作成します。

      RWCollectable*
      create(RWClassID id) const;

    ヒープから `RWClassID id` を持つクラスの新しいインスタンスを割り当て、そのポインタを返します。`id` がなければ NULL を返します。このインスタンスはヒープから割り当てられるので、作業終了後はユーザーが削除する必要があります。

      RWCollectable*
      create(RWString sid) const;

    ヒープから `RWSStringID sid` を持つクラスの新しいインスタンスを割り当て、そのポインタを返します。`sid` がなければ NULL を返します。このインスタンスはヒープから割り当てられるので、作業終了後はユーザーが削除する必要があります。

      RWuserCreator
      getFunction(RWClassID id) const;

    RWFactory から `RWClassID id` の大域関数へのポインタを返します。`id` がなければ `NULL` を返します。

      RWuserCreator
      getFunction(RWStringID sid) const;

    RWFactory から `RWStringID sid` の大域関数へのポインタを返します。`sid` がなければ NULL を返します。

      void
      removeFunction(RWClassID id);

    RWFactory から `RWClassID id` の大域関数を取り除きます。ファクトリに `id` がなければ、何も実行しません。

      void
      removeFunction(RWStringID sid);

    RWFactory から `RWStringID sid` の大域関数を取り除きます。ファクトリに `sid` がなければ、何も実行しません。

      RWStringID
      stringID(RWClassID id) const;

    `id` に関連付けられた RWStringID を検索し、それを返します。関連がなければ、`RWStringID("NoID")` を返します。

      RWClassID
      classID(RWStringID) const;

    `sid` に関連付けられた RWClassID を検索し、それを返します。関連がなければ、`__RWUNKNOWN` を返します。