2012-11-11 25 views
0

我有模板方法,我希望模板方法使用類中的特定方法來執行操作。可能嗎 ?使用類方法的模板

template<typename T> 
int minus(T t1,T t2){ 
return t1-t2; 
} 

而且在我的蘋果對象類,我有一個叫做用getPrice() 我怎麼能結合兩種方法。

這是正確的嗎?

template<typename T> 
int minus(T t1,T t2){ 
return t1.getPrice()-t2.getPrice(); 
} 
+0

是的,這會工作,但它失去的模板的第一個版本的通用性。也就是說,它只適用於具有名爲'getPrice'的成員函數的類型。 –

回答

5

爲此,您可能希望你的類型的普通函數:

template <class T> 
int minus(T t1, T t2) { 
    return t1 - t2; 
} 

int minus(const apple& t1, const apple& t2) { 
    return t1.getPrice() - t2.getPrice(); 
} 
+0

謝謝皮特,我想知道如何結合運算符重載例如operator- –

+0

這取決於類型應該做什麼。我不希望名爲「apple」的類型提供'operator-';減去兩個蘋果沒有多大意義。但對於一些算法,能夠減去價格是明智的,對於這些算法,您正在探索的「減號」是一種好方法。 –