// C general factory registration class // ----------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#ifndef genericfactoryh # Define GenericFactoryh
#include
#define register_class (base_class, derived_class) / registerinpfactory
#define create_class (base_class, derived_class) / genericfactory
/ / -------------------------------------------------------------------------------------------- --------------------------- USING std :: string; using std :: map;
Template
Typedef st :: map
FnRegistry Registry;
GenericFactory () {}
GenericFactory (const genericfactory &) {} // does not implement
GenericFactory & Operator = (const genericfactory &) {} // does not implement
PUBLIC: static genericfactory & instance () {static genericfactory
Void regreatefn (const classidkey & classname, basecreatefn fn) {registry [classname] = fn;}
ManufacturedType * Create (const ClassIDKey & classname) const {ManufacturedType * theObject (0); FnRegistry :: const_iterator regEntry = registry.find (classname); if (! RegEntry = registry.end ()) {theObject = regEntry-> second () } Return theobject;}};
template