Я читал книгу о шаблонах и нашел следующий фрагмент кода:
template <template <class> class CreationPolicy>
class WidgetManager : public CreationPolicy<Widget>
{
...
void DoSomething()
{
Gadget* pW = CreationPolicy<Gadget>().Create();
...
}
};
Я не получил вложенные шаблоны, указанные для CreationPolicy (который снова является шаблоном). В чем смысл этого странного синтаксиса?





Это означает, что CreationPolicy также должен быть шаблоном, который принимает один параметр типа. Вы можете думать об этом как о шаблоне, эквивалентном указателям на функции или обратным вызовам.
Как вы можете видеть в этом примере, CreationPolicy используется с аргументом:
CreationPolicy<SomeType>
Это было бы невозможно, если бы CreationPolicy не был объявлен как «параметр шаблона шаблона» (да, это действительно то, что они называются.)
Это параметр шаблона шаблона.
См. http://www.comeaucomputing.com/techtalk/templates/#ttp
В основном CreationPolicy - это параметр шаблона с ограничением, что это должен быть шаблонный класс с одним параметром.