政策和模板

时间:2014-04-07 12:43:20

标签: c++ templates policy

在Alexandrescu的书中,有一段代码让我感到困惑。

template <template <class Created> class CreationPolicy> 
class WidgetManager : public CreationPolicy<Widget> 
{ 
 ... 
};

据我所知,它可以在模板中告诉它一个模板类。所以我们接受“创建”#39;并将其设置为CreationPolicy类,然后从新创建的CreationPolicy类公开继承WidgetManager。这怎么可能呢?我在这里误解了什么?

1 个答案:

答案 0 :(得分:1)

CreationPolicy是一个模板类,专门用于创建一些类。

WidgetManager派生自一个专门用于创建Widget对象的CreationPolicy(WidgetManager正在管理的东西)。

Widget的声明必须已经可供编译器使用。

WidgetManager也是一个模板类,专门用于CreationPolicy(它本身就是一个模板化的类)。

Alexandrescu所做的是将经理与创建对象的方式分开。他还将创建方法与正在创建和管理的对象分离。

所以你可以这样做:

WidgetManager&LT; MemoryCreator&GT; manager1 = ...;

WidgetManager&LT; FileSystemCreator&GT; manager2 = ...;

然后您可以向manager1或manager2询问Widget对象,而无需关心它们的创建方式。