Click on the banner to return to the Class Reference home page.

©Copyright 1996 Rogue Wave Software

RWFactory

Synopsis

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

RWFactory* theFactory;

Description

Class RWFactory can create an instance of an RWCollectable object, given a class ID. It does this by maintaining a table of class IDs and associated "creator functions." A creator function has prototype:

RWCollectable*  aCreatorFunction();

This function should create an instance of a particular class. For a given RWClassID tag, the appropriate function is selected, invoked and the resultant pointer returned. Because any object created this way is created off the heap, you are responsible for deleting it when done.

There is a one-of-a-kind global RWFactory which can be accessed using getRWFactory. It is guaranteed to have creator functions in it for all of the classes referenced by your program. See also the section in the User's Guide about RWFactory.

Persistence

None

Example

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

main(){
 // Create new RWBag off the heap, using Class ID __RWBAG.

 RWBag* b = (RWBag*)getRWFactory ()->create(__RWBAG);

 b->insert( new RWCollectableDate ); // Insert today's date
 // ...
 b->clearAndDestroy();     // Cleanup: first delete members,
 delete b;                 // then the bag itself
}

Public Constructors

RWFactory();

Public Operator

RWBoolean
operator<=(const RWFactory& h);

Public Member Functions

void
addFunction(RWuserCreator uc, RWClassID id);
void
addFunction(RWuserCreator uc, RWClassID id, RWStringID sid);
RWCollectable*
create(RWClassID id) const;
RWCollectable*
create(RWString sid) const;
RWuserCreator
getFunction(RWClassID id) const;
RWuserCreator
getFunction(RWStringID sid) const;
void
removeFunction(RWClassID id);
void
removeFunction(RWStringID sid);
RWStringID
stringID(RWClassID id) const;
RWClassID
classID(RWStringID) const;