“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>;