Это шаблон специализации.Типичным случаем будет частичная специализация:
#include <iostream>
template<class T1, class T2> struct foo
{
void doStuff() { std::cout << "generic foo "; }
};
template<class T1>
struct foo<T1, int>
{
void doStuff() { std::cout << "specific foo with T2=int"; }
};
Как видите, специализация удаляет один элемент из параметров шаблона и явно указывает тип вместо удаленного.Это означает, что если существует только один тип шаблона, <>
просто станет пустым:
template<class T1> struct bar
{
void doStuff() { std::cout << "generic bar"; }
};
template<>
struct bar<int>
{
void doStuff() { std::cout << "specific bar with T1=int"; }
};