C++ 函数的显式实例化

C++ 函数的显式实例化,c++,explicit-instantiation,C++,Explicit Instantiation,为什么要对类型使用函数的显式实例化?如果我不使用函数的显式实例化,则模板用于创建必要的函数,那么显式实例化的用途是什么 template <class Any> void Swap (Any &, Any &); // template prototype template <> void Swap<job>(job &, job &); // explicit specialization for job int main

为什么要对类型使用函数的显式实例化?如果我不使用函数的显式实例化,则模板用于创建必要的函数,那么显式实例化的用途是什么

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的显式实例化
短a,b;
掉期(a、b);
//隐式模板实例化
作业n,m;
交换(n,m);
//对作业使用显式专门化
charg,h;
互换(g,h);
//对char使用显式模板实例化
}
在上面的示例中,对char类型进行显式实例化。这有什么用??如果编译器可以利用模板为char类型生成fn


如果有任何参考资料可以帮助我明确我的概念,请务必包括这些参考资料。

模板的定义必须在每个实例化模板的翻译单元中可用。通常,这是通过在标题中定义模板来实现的;但在某些情况下,您可能不想这样做——也许您不想让客户机看到实现的源代码

相反,您可以在标题中声明模板;然后定义它,并在源文件中明确地实例化您需要的所有专业知识。

对于Downvoter先生,请尽力留下您的否决理由。如果是因为你发现这是一个骗局,就我记忆所及,当我搜索时,这个问题没有出现(或者可能是因为在我发布我的问题后,标题被弄清楚了)