【发布时间】:2014-05-19 17:13:26
【问题描述】:
Alexandrescu 的书中有一段代码让我很困惑。
template <template <class Created> class CreationPolicy>
class WidgetManager : public CreationPolicy<Widget>
{
...
};
据我所知,它是模板中的一个模板类。因此,我们接受“Created”并将其放入 CreationPolicy 类,然后从新创建的 CreationPolicy 类公开继承 WidgetManager。这怎么可能呢?这里有什么误解吗?
【问题讨论】:
-
但是
class Created意味着它不应该只是class吗? (在您发布的链接中,同一代码摘录中没有Created) -
如果您声明一个小部件,代码会编译。内部模板指定 CreationPolicy 本身就是一个模板类。 Alexandrescu 试图做的是将创建策略(语义)与创建的实际对象分离。为什么你要在图书馆最深处以外的地方这样做是一个我没有很好答案的问题。
-
@VisViva 为模板模板参数指定“class Created”而不是“class”只是为了更好的文档(引用:“类似于函数声明中的正式参数名称”) - 参见 f.e. informit.com/articles/article.aspx?p=376878