EventAnalysis  1.3.0
Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
EA::Factory< T, ConstructorArgs > Class Template Reference

Template factory class. More...

#include <Factory.h>

Public Member Functions

bool RegisterBuilder (const std::string &builderName, T *(*objectBuilder)(ConstructorArgs...))
 Register a builder for a class. More...
 
std::unique_ptr< T > CreateObject (const std::string &name, ConstructorArgs... arguments)
 Create an object. More...
 
const std::vector< std::string > & GetListOfRegisteredBuilders ()
 Gets a vector containing the names of available registered builders. More...
 

Static Public Member Functions

static FactoryGetInstance ()
 Getter method for singleton pointer. More...
 

Private Types

typedef std::map< std::string, T *(*)(ConstructorArgs...)> BuildersMap
 

Private Member Functions

 Factory ()
 

Private Attributes

std::string _factoryName
 
BuildersMap _builders
 
std::vector< std::string > _builderNames
 

Detailed Description

template<class T, typename... ConstructorArgs>
class EA::Factory< T, ConstructorArgs >

Template factory class.

This class is a generic factory, that can build all the derived classes of a given base class using constructors with any set of arguments. The first template argument is the base class of the objects built by the factory. Variadic template arguments are the constructor arguments. Actual object build is done by means of builder functions, each constructing instances of a given derived class. Builders must be registered providing a suitable builder function with a name (which can be the name of the built class itself).

Member Typedef Documentation

◆ BuildersMap

template<class T , typename... ConstructorArgs>
typedef std::map<std::string, T *(*)(ConstructorArgs...)> EA::Factory< T, ConstructorArgs >::BuildersMap
private

Constructor & Destructor Documentation

◆ Factory()

template<class T , typename... ConstructorArgs>
EA::Factory< T, ConstructorArgs >::Factory ( )
private

Member Function Documentation

◆ CreateObject()

template<class T , typename... ConstructorArgs>
std::unique_ptr< T > EA::Factory< T, ConstructorArgs >::CreateObject ( const std::string &  name,
ConstructorArgs...  arguments 
)

Create an object.

The builder is fetched by its name. If the desired builder is not available, the NULL pointer will be returned.

Parameters
nameThe name of the builder for the desired object.
Returns
a pointer to an instance of the derived class created by the builder (NULL if any error occurs).

◆ GetInstance()

template<class T , typename... ConstructorArgs>
Factory< T, ConstructorArgs... > & EA::Factory< T, ConstructorArgs >::GetInstance ( )
static

Getter method for singleton pointer.

Returns
pointer to the singleton instance of the Factory class.

◆ GetListOfRegisteredBuilders()

template<class T , typename... ConstructorArgs>
const std::vector< std::string > & EA::Factory< T, ConstructorArgs >::GetListOfRegisteredBuilders ( )

Gets a vector containing the names of available registered builders.

Returns
a vector with the names of registered builders.

◆ RegisterBuilder()

template<class T , typename... ConstructorArgs>
bool EA::Factory< T, ConstructorArgs >::RegisterBuilder ( const std::string &  builderName,
T *(*)(ConstructorArgs...)  objectBuilder 
)

Register a builder for a class.

Parameters
builderNameThe name of the builder.
objectBuilderPointer to a builder function for the class.
Returns
true if the class has been correctly registered.

Member Data Documentation

◆ _builderNames

template<class T , typename... ConstructorArgs>
std::vector<std::string> EA::Factory< T, ConstructorArgs >::_builderNames
private

◆ _builders

template<class T , typename... ConstructorArgs>
BuildersMap EA::Factory< T, ConstructorArgs >::_builders
private

◆ _factoryName

template<class T , typename... ConstructorArgs>
std::string EA::Factory< T, ConstructorArgs >::_factoryName
private

The documentation for this class was generated from the following file: