2008-12-13 81 views
3

我正在读一本关于模板,发现下面的一段代码:模板语法

template <template <class> class CreationPolicy> 
class WidgetManager : public CreationPolicy<Widget> 
{ 
... 
void DoSomething() 
{ 
Gadget* pW = CreationPolicy<Gadget>().Create(); 
... 
} 
}; 

我没有得到把creationPolicy(这又是一个模板)指定的嵌套模板。那个奇怪的看起来语法是什么意思?

回答

5

这意味着CreationPolicy也必须是一个模板,它接受一个类型参数。你可以认为它有点像函数指针或回调函数的模板。

正如你在这个例子看到,CreationPolicy是使用参数:

CreationPolicy<SomeType> 

除非CreationPolicy已被宣布为“模板的模板参数”那是不可能的(是的,这真的是这些被称为。)

2

这是一个模板模板参数。

见​​

creationPolicy的基本上是模板参数,但它必须与一个参数的模板类的约束。