Changeset 5777 for code/branches/core5/src/libraries/core/ClassFactory.h
- Timestamp:
- Sep 24, 2009, 12:15:20 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/core5/src/libraries/core/ClassFactory.h
r5769 r5777 54 54 { 55 55 public: 56 virtual ~BaseFactory() {}; 56 57 virtual BaseObject* fabricate(BaseObject* creator) = 0; 57 virtual ~BaseFactory() {};58 58 }; 59 59 … … 66 66 { 67 67 public: 68 static bool create(const std::string& name, bool bLoadable = true);68 ClassFactory(const std::string& name, bool bLoadable = true); 69 69 BaseObject* fabricate(BaseObject* creator); 70 71 private:72 ClassFactory() {} // Don't create73 ClassFactory(const ClassFactory& factory) {} // Don't copy74 virtual ~ClassFactory() {} // Don't delete75 76 static T* createNewObject(BaseObject* creator);77 70 }; 78 71 … … 84 77 */ 85 78 template <class T> 86 bool ClassFactory<T>::create(const std::string& name, bool bLoadable)79 ClassFactory<T>::ClassFactory(const std::string& name, bool bLoadable) 87 80 { 88 81 COUT(4) << "*** ClassFactory: Create entry for " << name << " in Factory." << std::endl; 89 ClassIdentifier<T>::getIdentifier(name)->addFactory( new ClassFactory<T>);82 ClassIdentifier<T>::getIdentifier(name)->addFactory(this); 90 83 ClassIdentifier<T>::getIdentifier()->setLoadable(bLoadable); 91 84 Factory::add(name, ClassIdentifier<T>::getIdentifier()); 92 93 return true;94 85 } 95 86 … … 101 92 inline BaseObject* ClassFactory<T>::fabricate(BaseObject* creator) 102 93 { 103 return ClassFactory<T>::createNewObject(creator); 104 } 105 106 /** 107 @brief Creates and returns a new object of class T; this is a wrapper for the new operator. 108 @return The new object 109 */ 110 template <class T> 111 inline T* ClassFactory<T>::createNewObject(BaseObject* creator) 112 { 113 return new T(creator); 94 return static_cast<BaseObject*>(new T(creator)); 114 95 } 115 96 }
Note: See TracChangeset
for help on using the changeset viewer.