Синтаксис шаблона

Я читал книгу о шаблонах и нашел следующий фрагмент кода:

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

Я не получил вложенные шаблоны, указанные для CreationPolicy (который снова является шаблоном). В чем смысл этого странного синтаксиса?

13.12.2008 09:12:32
2 ОТВЕТА
РЕШЕНИЕ

Это означает, что CreationPolicyтакже должен быть шаблон, который принимает один параметр типа. Вы можете думать об этом как о шаблонном эквиваленте указателей функций или обратных вызовов.

Как вы можете видеть в этом примере, CreationPolicyиспользуется с аргументом:

CreationPolicy<SomeType>

Это было бы невозможно, если бы CreationPolicyне было объявлено как «параметр шаблона шаблона» (да, это действительно так они называются.)

5
13.12.2008 09:23:40

Это параметр шаблона шаблона.

См. Http://www.comeaucomputing.com/techtalk/templates/#ttp

По сути, CreationPolicy - это параметр шаблона с ограничением на то, что это должен быть шаблонный класс с одним параметром.

2
13.12.2008 09:42:45