显式实例化函数

时间:2013-03-01 13:41:29

标签: c++ explicit-instantiation

为什么我会使用函数模板的显式实例化?如果我不使用 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。

如果有任何参考可以帮助我清除我的概念,那么请包括那些。

1 个答案:

答案 0 :(得分:1)

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

相反,您可以在标题中声明模板;然后定义它,并在源文件中显式实例化您需要的所有特化。