2013-03-01 55 views
-1

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

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。

如果有任何refrences,可以帮助我清楚我的概念,请不要包括那些。

+0

致** Mr.Downvoter **,请尽力留下您的失败理由。因为你发现它是一个愚蠢的事情,据我所知,当我进行搜索时,这个问题没有出现(或者因为我发布我的问题后标题变得清晰) – 2013-04-26 19:15:57

回答

1

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

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