“template <>”vs“模板”没有括号 – 有什么区别?

假设我已经声明:

template <typename T> void foo(T& t); 

现在,有什么区别

 template <> void foo<int>(int& t); 

 template void foo<int>(int& t); 

语义? 模板没有括号和模板与空括号有其他语境中的其他语义吗?


相关: 如何强制C ++模板的特定实例实例化?

template <> void foo<int>(int& t); 宣布模板的专业化 ,可能有不同的主体。

template void foo<int>(int& t); 导致模板的显式实例化 ,但不引入专门化。 它只是强制为特定types的模板实例化。

通过类/结构,

 template <typename T> struct foo {}; 

以下是专业化:

 template <> struct foo<int>{}; 

以下是一个明确的实例:

 template struct foo<int>;