Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Alter Hase
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
template < typename _abstract_product, typename _identifier_type, typename _product_creator = _abstract_product* (*)(), template<typename, typename> class _factory_error_policy = DefaultFactoryErrorHandler > class Factory : public _factory_error_policy<_identifier_type, _abstract_product> { protected: std::map<_identifier_type, _product_creator> associations_; public: bool registerObject(_identifier_type const& id, _product_creator creator) { associations_.insert(std::pair<_identifier_type, _product_creator>( id, creator)); return true; } bool unregisterObject(_identifier_type const& identifier) { if(associations_.find(identifier) == associations_.end()) return false; associations_.erase(identifier); return true; } _abstract_product* createObject(_identifier_type const& identifier) { std::map<identifier_type, _product_creator>::iterator i = associations_.find(identifier); if(i != associations_.end()) { return (i->second)(); } return handleError(identifier); //Must be defined by policy !!! } }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//Register at factory!!! namespace { cenray::ILightSceneNode* createPointLightSceneNode() { return new cenray::PointLightSceneNode; } std::wstring const LIGHT_NAME = std::wstring(L"Point"); bool const pointlight_registered = cenray::LightSceneNodeFactory::instance().registerObject(LIGHT_NAME, createPointLightSceneNode); } |
Alter Hase
C-/C++-Quelltext |
|
1 2 3 |
... return (i->second)(); ... |
Zitat von »"Phil_GDM"«
Laut Andrescu kann man es aber irgendwie über Funktoren erreichen, dass man Parameter verwenden kann (hab aber keine Ahnung wie).
Alter Hase
Werbeanzeige