Public Types | |
| typedef T *(* | Creator )() |
Public Member Functions | |
| void | addCreator (Creator, const char *nm, const char *username=0) |
| T * | create (const char *nm) const |
| Name may be not be null. | |
Protected Attributes | |
| TypeSet< Creator > | creators_ |
Generalized static factory that can deliver instances of T, when no variable is needed in the creation.
Usage. Each implementation of the base class T must add themselves to the factory when application starts up, e.g. in an initClass() function:
class A { public: virtual int myFunc() = 0; }; class B : public A { public: static A* createFunc() { return new B; } static void initClass() { thefactory.addCreator(createFunc,"MyKeyword", "My Name"); } int myFunc(); };
Two macros are available to make a static accessfuncion for the factory:
mDefineFactory( ClassName, FunctionName );
that will create a static function that returns an instance to Factory<ClassName>. If the function is a static member of a class, it has to be defined with the mDefineFactoryInClass macro.
The static function must be implemented in a src-file with the macro
mImplFactory( ClassName, FunctionName );
| void Factory< T >::addCreator | ( | Creator | cr, | |
| const char * | nm, | |||
| const char * | username = 0 | |||
| ) | [inline] |
Name may be not be null If nm is found, old creator is replaced. nm can be a SeparString, separated by cSeparator(), allowing multiple names, where the first name will be the main name that is returned in getNames.
| T * Factory< T >::create | ( | const char * | nm | ) | const [inline] |
Name may be not be null.
1.7.1