带模板的 C++ 工厂模式
C++ Factory Pattern With Templates
我正在尝试使用 C++ 模板编写抽象工厂代码。因为在遇到麻烦之前我从来没有做过那样的事情。我写的代码,你可以自己验证,是错误的,我不知道如何更正它。我的想法是有两个模板化的 classes 将包含 base_class 和 derived_class,所以这个 class 可以与任何类型的 class 一起使用.出于同样的原因,它也被模板化了。
#ifndef _t_factory_h_
#define _t_factory_h_
#include <iostream>
#include <map>
template < class T >
class base_creator
{
public:
virtual ~base_creator(){ };
virtual T* create() = 0;
};
template < class derived_type , class base_type >
class derived_creator : public base_creator<base_type>
{
public:
base_type* create()
{
return new derived_type;
}
};
template <class _key, class base >
class factory
{
public:
void register_type(_key id , derived_creator<derived_type,base_type>* _fn)
{
_function_map[id] = _fn;
}
base* create(_key id)
{
return _function_map[id]->create();
}
~factory()
{
auto it = _function_map.begin();
for(it ; it != _function_map.end() ; ++it)
{
delete (*it).second;
}
}
private:
std::map<_key , derived_creator<derived_type,base_type>*> _function_map;
};
#endif /* defined _t_factory_h_ */
如果有人可以帮助我更正此代码,我将不胜感激。
问题已解决。
这是代码:
#ifndef _t_factory_h_
#define _t_factory_h_
#include <iostream>
#include <map>
template < class T >
class base_creator
{
public:
virtual ~base_creator(){ };
virtual T* create() = 0;
};
template < class derived_type , class base_type >
class derived_creator : public base_creator<base_type>
{
public:
base_type* create()
{
return new derived_type;
}
};
template <class _key, class base_type >
class factory
{
public:
void register_type(_key id , base_creator<base_type>* _fn)
{
_function_map[id] = _fn;
}
base_type* create(_key id)
{
return _function_map[id]->create();
}
~factory()
{
auto it = _function_map.begin();
for(it ; it != _function_map.end() ; ++it)
{
delete (*it).second;
}
}
private:
std::map<_key , base_creator<base_type>*> _function_map;
};
#endif /* defined _t_factory_h_ */
我正在尝试使用 C++ 模板编写抽象工厂代码。因为在遇到麻烦之前我从来没有做过那样的事情。我写的代码,你可以自己验证,是错误的,我不知道如何更正它。我的想法是有两个模板化的 classes 将包含 base_class 和 derived_class,所以这个 class 可以与任何类型的 class 一起使用.出于同样的原因,它也被模板化了。
#ifndef _t_factory_h_
#define _t_factory_h_
#include <iostream>
#include <map>
template < class T >
class base_creator
{
public:
virtual ~base_creator(){ };
virtual T* create() = 0;
};
template < class derived_type , class base_type >
class derived_creator : public base_creator<base_type>
{
public:
base_type* create()
{
return new derived_type;
}
};
template <class _key, class base >
class factory
{
public:
void register_type(_key id , derived_creator<derived_type,base_type>* _fn)
{
_function_map[id] = _fn;
}
base* create(_key id)
{
return _function_map[id]->create();
}
~factory()
{
auto it = _function_map.begin();
for(it ; it != _function_map.end() ; ++it)
{
delete (*it).second;
}
}
private:
std::map<_key , derived_creator<derived_type,base_type>*> _function_map;
};
#endif /* defined _t_factory_h_ */
如果有人可以帮助我更正此代码,我将不胜感激。
问题已解决。 这是代码:
#ifndef _t_factory_h_
#define _t_factory_h_
#include <iostream>
#include <map>
template < class T >
class base_creator
{
public:
virtual ~base_creator(){ };
virtual T* create() = 0;
};
template < class derived_type , class base_type >
class derived_creator : public base_creator<base_type>
{
public:
base_type* create()
{
return new derived_type;
}
};
template <class _key, class base_type >
class factory
{
public:
void register_type(_key id , base_creator<base_type>* _fn)
{
_function_map[id] = _fn;
}
base_type* create(_key id)
{
return _function_map[id]->create();
}
~factory()
{
auto it = _function_map.begin();
for(it ; it != _function_map.end() ; ++it)
{
delete (*it).second;
}
}
private:
std::map<_key , base_creator<base_type>*> _function_map;
};
#endif /* defined _t_factory_h_ */