gpt4 book ai didi

带模板的 C++ 工厂模式

转载 作者:行者123 更新时间:2023-12-03 12:50:32 30 4
gpt4 key购买 nike

我正在尝试使用 C++ 模板编写抽象工厂。因为在遇到麻烦之前我从来没有做过这样的事情。我写的代码,你可以自己验证,是错误的,我不知道如何纠正它。我的想法是,有两个模板类将包含 base_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++ 工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29851559/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com