cObjectFactory Class Reference

API: cObjectFactory Class Reference
API
cObjectFactory Class Reference
Inheritance diagram for cObjectFactory:
[legend]

Public Member Functions

Constructors, destructor, assignment.
 cObjectFactory (const char *name, cObject *(*creatorfunc)(), void *(*castfunc)(cObject *), const char *description=nullptr)
Redefined cObject member functions.
virtual std::string str () const override
New methods
virtual bool isAbstract () const
virtual cObjectcreateOne () const
virtual bool isInstance (cObject *obj) const
const char * getDescription () const
Public Member Functions inherited from cNoncopyableOwnedObject
 cNoncopyableOwnedObject (const char *name=nullptr, bool namepooling=true)
virtual cNoncopyableOwnedObjectdup () const override
Public Member Functions inherited from cOwnedObject
 cOwnedObject ()
 cOwnedObject (const char *name, bool namepooling=true)
 cOwnedObject (const cOwnedObject &obj)
virtual ~cOwnedObject ()
cOwnedObjectoperator= (const cOwnedObject &o)
virtual cObjectgetOwner () const override
virtual bool isOwnedObject () const override
Public Member Functions inherited from cNamedObject
 cNamedObject ()
 cNamedObject (const char *name, bool namepooling=true)
 cNamedObject (const cNamedObject &obj)
virtual ~cNamedObject ()
cNamedObjectoperator= (const cNamedObject &o)
virtual void setName (const char *s)
virtual const char * getName () const override
virtual void setNamePooling (bool b)
virtual bool getNamePooling ()
Public Member Functions inherited from cObject
 cObject ()
 cObject (const cObject &other)=default
virtual ~cObject ()
virtual const char * getClassName () const
bool isName (const char *s) const
virtual const char * getFullName () const
virtual std::string getFullPath () const
virtual std::string getClassAndFullName () const
virtual std::string getClassAndFullPath () const
const cObjectgetThisPtr () const
virtual std::ostream & printOn (std::ostream &os) const
virtual bool isSoftOwner () const
virtual void forEachChild (cVisitor *v)
cObjectfindObject (const char *name, bool deep=true)
virtual cClassDescriptorgetDescriptor () const
void copyNotSupported () const

Static Public Member Functions

Static factory methods
static cObjectFactoryfind (const char *className, const char *contextNamespace=nullptr, bool fallbackToOmnetpp=true)
static cObjectFactoryget (const char *className, const char *contextNamespace=nullptr, bool fallbackToOmnetpp=true)
static cObjectcreateOne (const char *classname)
static cObjectcreateOneIfClassIsKnown (const char *classname)
Static Public Member Functions inherited from cOwnedObject
static long getTotalObjectCount ()
static long getLiveObjectCount ()
static void resetObjectCounters ()
static cSoftOwnergetOwningContext ()

Additional Inherited Members

Protected Member Functions inherited from cObject
virtual void take (cOwnedObject *obj)
virtual void drop (cOwnedObject *obj)
void dropAndDelete (cOwnedObject *obj)

Description

The class behind the createOne() function and the Register_Class() macro.

Each instance is a factory for a particular class: it knows how to create an object of that class.

See also
Register_Class(), Define_Module() macros

Constructor & Destructor Documentation

◆ cObjectFactory()

cObjectFactory ( const char * name,
cObject *(* creatorfunc )(),
void *(* castfunc )(cObject *),
const char * description = nullptr )

Constructor.

Referenced by find(), and get().

Member Function Documentation

◆ str()

virtual std::string str ( ) const
overridevirtual

Produces a one-line description of the object's contents. See cObject for more details.

Reimplemented from cObject.

◆ isAbstract()

virtual bool isAbstract ( ) const
inlinevirtual

Returns true if the class this object stands for is abstract. createOne() cannot be called for abstract classes.

◆ createOne() [1/2]

virtual cObject * createOne ( ) const
virtual

Creates an instance of a particular class by calling the creator function. The result has to be cast to the appropriate type (preferably by dynamic_cast or check_and_cast). The method will throw an error if the class is abstract (see isAbstract()).

Referenced by omnetpp::createOne().

◆ isInstance()

virtual bool isInstance ( cObject * obj) const
inlinevirtual

Returns true if the given object can be cast (via dynamic_cast) to the class represented by this factory object, and false otherwise.

◆ getDescription()

const char * getDescription ( ) const
inline

Returns a description string.

◆ find()

cObjectFactory * find ( const char * className,
const char * contextNamespace = nullptr,
bool fallbackToOmnetpp = true )
static

Finds the factory object for the class given in the className parameter, or nullptr if not found. The class must have been registered previously with the Register_Class() macro.

References cObjectFactory().

◆ get()

cObjectFactory * get ( const char * className,
const char * contextNamespace = nullptr,
bool fallbackToOmnetpp = true )
static

Like find(), but throws an error if the object was not found.

References cObjectFactory().

◆ createOne() [2/2]

cObject * createOne ( const char * classname)
static

Creates an instance of a particular class; the result has to be cast to the appropriate type by hand. The class must have been registered previously with the Register_Class() macro. The class name string should be given with any potential namespace, enclosing class etc.

If the class is not registered, this function throws an exception. If you'd prefer having nullptr returned instead, use the createOneIfClassIsKnown() function.

Example:

cMessage *msg = cObjectFactory::createOne("INET::EthernetFrame");

createOne() is used e.g. in parallel simulation, when an object is received from another partition in serialized form and has to be demarshalled.

See also
createOneIfClassIsKnown()
Register_Class() macro
cObjectFactory class

◆ createOneIfClassIsKnown()

cObject * createOneIfClassIsKnown ( const char * classname)
static

A variant of the createOne() function; this function doesn't throw an exception if the class is not registered, but returns nullptr instead.

See also
createOne()

Referenced by omnetpp::createOneIfClassIsKnown().