template BaseClassType *CreateObject() { return new ClassType; } template class ObjectFactory { protected: typedef BaseClassType *(*CreateObjectFunc)(); public: bool Register(int unique_id, CreateObjectFunc create_object) { if (m_object_creator.find(unique_id) != m_object_creator.end()) return false; m_object_creator[unique_id] = create_object; return true; } bool Unregister(int unique_id) { return (m_object_creator.erase(unique_id) == 1); } BaseClassType *Create(int unique_id) { std::map::iterator iter = m_object_creator.find(unique_id); if (iter == m_object_creator.end()) return NULL; return ((*iter).second)(); } protected: std::map m_object_creator; };