#ifndef _ClassFactory_H__ #define _ClassFactory_H__ #include "Identifier.h" namespace orxonox { // ############################### // ### ClassFactory ### // ############################### template class ClassFactory : public BaseFactory { public: static bool create(); BaseObject* fabricate(); private: ClassFactory() {} ClassFactory(const ClassFactory& factory) {} ~ClassFactory() {} static T* createNewObject(); }; template bool ClassFactory::create() { ClassIdentifier::getIdentifier()->addFactory(new ClassFactory); ClassIdentifier::getIdentifier()->startCreatingHierarchy(); #if HIERARCHY_VERBOSE std::cout << "*** Create Factory -> Create Class\n"; #endif BaseObject* temp = ClassIdentifier::getIdentifier()->fabricate(); delete temp; ClassIdentifier::getIdentifier()->stopCreatingHierarchy(); return true; } template BaseObject* ClassFactory::fabricate() { return ClassFactory::createNewObject(); } template T* ClassFactory::createNewObject() { return new T; } } #endif