策略和模板

Policies and templates

本文关键字:策略      更新时间:2023-10-16

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

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

据我所知,它是模板中的模板类。因此,我们接受"已创建"并将其放入CreationPolicy类,然后从新创建的CreationPolicy类中公开继承WidgetManager。这怎么可能?在这里误解了什么?

CreationPolicy 是一个模板类,专门用于某个类 Created。

WidgetManager

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

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

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

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

所以你可以这样做:

WidgetManager manager1 = ...;

WidgetManager manager2 = ...;

然后,您可以向经理 1 或经理 2 询问 Widget 对象,而不关心它们是如何创建的。