Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解抽象工厂泛型实现 我正在阅读Andrei Alexandrescu的现代C++设计,遇到了一些事情:_C++_Templates - Fatal编程技术网

理解抽象工厂泛型实现 我正在阅读Andrei Alexandrescu的现代C++设计,遇到了一些事情:

理解抽象工厂泛型实现 我正在阅读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

下面是Generic
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;