假设我已经声明:
template <typename T> void foo(T& t);
现在,两者之间有什么区别
template <> void foo<int>(int& t);
和
template void foo<int>(int& t);
在语义上?在没有上下文的情况下,无括号的模板和无括号的模板是否具有其他语义?
相关信息: 如何强制C ++模板的特定实例实例化?
假设我已经声明:
template <typename T> void foo(T& t);
现在,两者之间有什么区别
template <> void foo<int>(int& t);
和
template void foo<int>(int& t);
在语义上?在没有上下文的情况下,无括号的模板和无括号的模板是否具有其他语义?
相关信息: 如何强制C ++模板的特定实例实例化?
Answers:
template <> void foo<int>(int& t);
声明模板的特殊化,其主体可能不同。
template void foo<int>(int& t);
导致模板的显式实例化,但不引入专门化。它只是强制为特定类型实例化模板。
foo<int>
将具有与...不同的主体foo<T>
”。如果程序中其他地方的代码调用了foo<int>()
但您没有提供正文,则应该收到链接错误。