Changeset 10362 for code/branches/core7/src/libraries/core/CoreIncludes.h
- Timestamp:
- Apr 12, 2015, 11:07:14 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/core7/src/libraries/core/CoreIncludes.h
r10360 r10362 127 127 */ 128 128 #define RegisterClassWithFactory(ClassName, FactoryInstance, bLoadable) \ 129 Identifier& _##ClassName##Identifier = (new orxonox::SI_I(orxonox::registerClass<ClassName>(#ClassName, FactoryInstance, bLoadable)))->getIdentifier()129 orxonox::SI_I& _##ClassName##Identifier = (*new orxonox::SI_I(orxonox::registerClass<ClassName>(#ClassName, FactoryInstance, bLoadable))) 130 130 131 131 /** … … 213 213 } 214 214 215 216 217 218 /** 219 * The static initializer stores the parent classes of this identifier. The corresponding identifiers are later loaded. This prevents identifiers from 220 * being used before they are completely initialized. 221 */ 215 222 class _CoreExport StaticallyInitializedIdentifier : public StaticallyInitializedInstance 216 223 { 224 struct InheritsFrom 225 { 226 virtual ~InheritsFrom() {} 227 virtual Identifier* getParent() = 0; 228 }; 229 230 template <class T> 231 struct InheritsFromClass : public InheritsFrom 232 { 233 virtual Identifier* getParent() { return Class(T); } 234 }; 235 217 236 public: 218 237 StaticallyInitializedIdentifier(Identifier* identifier) : identifier_(identifier) {} 219 220 virtual void load() {} 238 ~StaticallyInitializedIdentifier() 239 { 240 for (size_t i = 0; i < this->parents_.size(); ++i) 241 delete parents_[i]; 242 } 243 244 virtual void load() 245 { 246 for (size_t i = 0; i < this->parents_.size(); ++i) 247 this->identifier_->inheritsFrom(this->parents_[i]->getParent()); 248 } 221 249 222 250 inline Identifier& getIdentifier() 223 251 { return *this->identifier_; } 224 252 253 template <class T> 254 inline StaticallyInitializedIdentifier& inheritsFrom() 255 { this->parents_.push_back(new InheritsFromClass<T>()); return *this; } 256 225 257 private: 226 258 Identifier* identifier_; 259 std::vector<InheritsFrom*> parents_; 227 260 }; 228 261
Note: See TracChangeset
for help on using the changeset viewer.