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

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 idRWStringID 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 を返します。