8 #ifndef KTEXTENSIBLESTRUCTFACTORY_HH_ 9 #define KTEXTENSIBLESTRUCTFACTORY_HH_ 14 #include "singleton.hh" 23 template<
class XBaseType >
26 template<
class XBaseType >
42 template<
class XBaseType,
class XDerivedType >
50 void Register(
const std::string& className)
const;
58 template<
class XBaseType >
62 typedef std::map< std::string, const KTExtensibleStructRegistrarBase< XBaseType >* >
FactoryMap;
76 FactoryCIt GetFactoryMapBegin()
const;
77 FactoryCIt GetFactoryMapEnd()
const;
90 template<
class XBaseType >
93 return iter->second->Create();
96 template<
class XBaseType >
100 if (it == fMap->end())
106 return it->second->Create();
109 template<
class XBaseType >
112 return iter->second->Create(
object);
115 template<
class XBaseType >
119 if (it == fMap->end())
125 return it->second->Create(
object);
128 template<
class XBaseType >
132 KTLOGGER(utillog_esfactory_reg,
"KTExtensibleStructFactory-Register");
135 if (it != fMap->end())
137 KTERROR(utillog_esfactory_reg,
"Already have factory registered for <" << className <<
">.");
141 KTDEBUG(utillog_esfactory_reg,
"Registered a factory for class " << className <<
", factory #" << fMap->size()-1);
144 template<
class XBaseType >
149 template<
class XBaseType >
155 template<
class XBaseType >
158 return fMap->begin();
161 template<
class XBaseType >
170 template<
class XBaseType,
class XDerivedType >
177 template<
class XBaseType,
class XDerivedType >
181 template<
class XBaseType,
class XDerivedType >
188 template<
class XBaseType,
class XDerivedType >
194 template<
class XBaseType,
class XDerivedType >
virtual ~KTExtensibleStructRegistrar()
FactoryMap::iterator FactoryIt
std::map< std::string, const KTExtensibleStructRegistrarBase< XBaseType > *> FactoryMap
~KTExtensibleStructFactory()
FactoryCIt GetFactoryMapEnd() const
KTExtensibleStructCore< XBaseType > * Create(const std::string &className)
void Register(const std::string &className, const KTExtensibleStructRegistrarBase< XBaseType > *registrar)
KTExtensibleStructRegistrarBase()
FactoryMap::const_iterator FactoryCIt
void Register(const std::string &className) const
virtual ~KTExtensibleStructRegistrarBase()
KTExtensibleStructRegistrar(const std::string &className)
FactoryMap::value_type FactoryEntry
KTExtensibleStructFactory()
KTLOGGER(applog, "KTApplication")
KTExtensibleStructCore< XBaseType > * Create() const
::Nymph::KTLogger utillog_esfactory("KTExtensibleStructFactory")
FactoryCIt GetFactoryMapBegin() const
Contains the logger class and macros, based on Kasper's KLogger class.
virtual KTExtensibleStructCore< XBaseType > * Create() const =0