Синтаксис шаблона - PullRequest
       6

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

3 голосов
/ 13 декабря 2008

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

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

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

Ответы [ 2 ]

5 голосов
/ 13 декабря 2008

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

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

CreationPolicy<SomeType>

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

2 голосов
/ 13 декабря 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...