Public feed
#528293
template<class BaseType>class BaseFactory{ public: virtual BaseType* create() = 0;};template<class BaseType, class T>class DerivedFactory : public BaseFactory<BaseType>{ public: virtual BaseType* create() { return new T(); }};template<typename KeyType, class BaseType>class ChildFactoryMap{ private: typedef std::map<KeyType, BaseFactory<BaseType>*> MapType; MapType derivedFactories; public: ~ChildFactoryMap() { for(typename MapType::iterator i = derivedFactories.begin(); i != derivedFactories.end(); ++i) { delete i->second; } } template<typename T> void addType(const KeyType& key) { derivedFactories.insert(typename MapType::value_type(key, new DerivedFactory<BaseType, T>); } BaseType* create(const KeyType& key) { return derivedFactories.get(key)->create(); }};