2014-04-07 154 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; 
} 

現在你可以使用這個函數添加許多不同的類型。