Public feed #528427

Someone

public cpp v1 · immutable
Raw Edit
·published 2007-06-01 15:30 UTC
rendered paste body
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();		}};// Usage is:ChildFactoryMap<std::string, MyBaseClass> m();m.addType<ChildA>("A");  // ChildA derives from MyBaseClassm.addType<ChildB>("B");  // ChildB derives from MyBaseClassm.create("B");           // Returns a new ChildBm.create("A");           // Returns a new ChildA