OpendTect  7.0
Public Types | Public Member Functions | Protected Attributes | List of all members
Factory< T > Class Template Reference

Generalized static factory that can deliver instances of T, when no variable is needed in the creation. More...

Inheritance diagram for Factory< T >:
[legend]

Public Types

typedef T *(* Creator) ()
 

Public Member Functions

void addCreator (Creator, const char *nm, const uiString &username=uiString::emptyString())
 
T * create (const char *nm) const
 Name may be not be null. More...
 
bool moveAfter (int from, int to)
 
void removeCreator (Creator)
 
- Public Member Functions inherited from FactoryBase
virtual ~FactoryBase ()
 
const char * currentName () const
 
BufferStringerrMsg () const
 
const char * getDefaultName () const
 
const BufferStringSetgetNames () const
 
const uiStringSetgetUserNames () const
 
bool hasName (const char *nm) const
 
bool isEmpty () const
 
void setDefaultName (int idx)
 
int size () const
 

Protected Attributes

TypeSet< Creatorcreators_
 
- Protected Attributes inherited from FactoryBase
StaticStringManager currentname_
 
StaticStringManager errmsgs_
 

Additional Inherited Members

- Static Public Member Functions inherited from FactoryBase
static char cSeparator ()
 
- Protected Member Functions inherited from FactoryBase
void addNames (const char *, const uiString &)
 
int indexOf (const char *) const
 
bool moveAfter_ (int, int)
 
void removeByIndex (int)
 
void setNames (int, const char *, const uiString &)
 

Detailed Description

template<class T>
class Factory< T >

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( Module, 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 );

<>

Member Typedef Documentation

◆ Creator

template<class T >
typedef T*(* Factory< T >::Creator) ()

Member Function Documentation

◆ addCreator()

template<class T >
void Factory< T >::addCreator ( Creator  cr,
const char *  nm,
const uiString username = uiString::emptyString() 
)
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.

◆ create()

template<class T >
T * Factory< T >::create ( const char *  nm) const
inline

Name may be not be null.

◆ moveAfter()

template<class T >
bool Factory< T >::moveAfter ( int  from,
int  to 
)
inline

Moves an item at the index from, after the index to

◆ removeCreator()

template<class T >
void Factory< T >::removeCreator ( Creator  cr)
inline

Member Data Documentation

◆ creators_

template<class T >
TypeSet<Creator> Factory< T >::creators_
protected

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B.V. 1995-2024