"шаблон <>" против "шаблона" без скобок - какая разница?
Предположим, что я заявил:
template <typename T> void foo(T& t);
Теперь, в чем разница между
template <> void foo<int>(int& t);
и
template void foo<int>(int& t);
семантически? А в шаблонах с шаблонами без привязки и с шаблонами с пустым-скобками есть другая семантика в других контекстах?
Связано с:
Как заставить экземпляр С++ создать экземпляр?
Суб >
Ответы
Ответ 1
template <> void foo<int>(int& t);
объявляет специализацию шаблона с потенциально различным телом.
template void foo<int>(int& t);
вызывает явное создание экземпляра шаблона, но не вводит специализацию. Он просто заставляет экземпляр шаблона для определенного типа.
Ответ 2
С классом /struct,
template <typename T> struct foo {};
Ниже приведена специализация:
template <> struct foo<int>{};
Ниже приведена явная инстанция:
template struct foo<int>;