理解抽象工厂泛型实现 我正在阅读Andrei Alexandrescu的现代C++设计,遇到了一些事情:
下面是Generic理解抽象工厂泛型实现 我正在阅读Andrei Alexandrescu的现代C++设计,遇到了一些事情:,c++,templates,C++,Templates,下面是GenericAbstractFactory的样子 template <class T> class AbstractFactoryUnit { public: virtual T* DoCreate(Type2Type<T>) = 0; virtual ~AbstractFactoryUnit() {} }; template < class TList, template <class> class Unit
AbstractFactory
的样子
template <class T>
class AbstractFactoryUnit
{
public:
virtual T* DoCreate(Type2Type<T>) = 0;
virtual ~AbstractFactoryUnit() {}
};
template
<
class TList,
template <class> class Unit = AbstractFactoryUnit
>
class AbstractFactory : public GenScatterHierarchy<TList, Unit>
{
public:
typedef TList ProductList;
template <class T> T* Create()
{
Unit <T>& unit = *this;
return unit.DoCreate(Type2Type<T>());
}
};
并定义以下类型定义:
typedef AbstractFactory
<
TYPELIST_3(Soldier, Monster, SuperMonster)
>
AbstractEnemyFactory;
typedef抽象工厂
<
类型列表_3(士兵、怪物、超人)
>
抽象工厂;
那么,在Alexandrescu的<代码>现代C++设计< /代码>中说:
您可以自动将引用转换为AbstractEnemyFactory
对AbstractFactory
,AbstractFactory
,或AbstractFactory
可能只是打字错误,他指的是AbstractFactoryUnit
等等
因为我不清楚如何将对
AbstractEnemyFactory
的引用转换为AbstractFactory
是的,这是一个打字错误,我认为它被列在了中(它在两个不同的条目中分别表示AbstractFactory
->AFUnit
和AFUnit
->AbstractFactoryUnit
).@DanielFrey看来你是对的,谢谢你。这只会让我有点心烦意乱。
typedef AbstractFactory
<
TYPELIST_3(Soldier, Monster, SuperMonster)
>
AbstractEnemyFactory;