2014-04-07 205 views
0

我试图弄清楚这与功能有什么区别。功能专业化

第一个是模板函数添加到表达式:

template <class T,class Y,class Z> 
Z add(T t,Y y) 
{ 
    return t+y; 
} 

Specialization_1:

template<> 
int add<int,int,int>(int t,int y) 
{ 

    return t+y+10000; 
} 

Specialization_2:

int add(int t,int y) 
{ 

    return t+y+10000; 
} 

什么差别和speciaization_1之间specialization_2? 是否需要在宣告前使用模板<>

+0

模板可与anyType的 使用,而你的功能只适用于'int' –

+0

我知道我们为什么要使用模板,但我问了一下差异betweeen spec_1和spec_2 – Radek

+0

可能[模板专业化和重载之间的区别功能?](http://stackoverflow.com/questions/1511935/differences-between-template-specialization-and-overloading-for-functions) – Constructor

回答

2

首先是专业化。第二是超载。

第一个将创建一个特殊的模板变量。第二个会创建另一个函数同名

+0

所以,当更好地使用专业化超载? – Radek

+0

this may helphttp://stackoverflow.com/questions/7108033/template-specialization-vs-function-overloading –

+0

谢谢@asaf应用程序 – Radek

0

我没有看到你的第一个专业兴趣。这是比较有用的,例如:

template <typename T> 
T add(T t,T y) 
{ 
    return t+y+10000; 
} 

现在你可以使用这个函数添加许多不同的类型。