为什么我会使用函数模板的显式实例化?如果我不使用 function 的显式实例化,那么模板用于创建必要的函数,然后使用显式实例化?
template <class Any>
void Swap (Any &, Any &);
// template prototype
template <> void Swap<job>(job &, job &);
// explicit specialization for job
int main(void)
{
template void Swap<char>(char &, char &);
// explicit instantiation for char
short a, b;
Swap(a,b);
// implicit template instantiation for short
job n, m;
Swap(n, m);
// use explicit specialization for job
char g, h;
Swap(g, h);
// use explicit template instantiation for char
}
在上面的例子中。对char类型进行显式实例化。有什么用?如果编译器可以使用模板为char类型生成fn。
如果有任何参考可以帮助我清除我的概念,那么请包括那些。
答案 0 :(得分:1)
模板的定义必须在每个实例化它的翻译单元中可用。通常,这是通过在标题中定义模板来实现的;但在某些情况下,您可能不想这样做 - 也许您不希望您的客户看到实施的来源。
相反,您可以在标题中声明模板;然后定义它,并在源文件中显式实例化您需要的所有特化。