2014-11-14 29 views
1

因此,例如我想創建一個函數,添加兩個數字並返回總數。用不同的參數創建模板函數

template<typename T1, typename T2> 
T1 add(T1 n1, T2 n2){ 
    return n1 + n2; 
} 

的問題是,如果T1intT2float。那麼功能將會是return int。但我想要它return float。有一個技巧或方法來實現它?

回答

4

template<typename RT, typename T1, typename T2> 
RT add(T1 n1, T2 n2){ 
    return n1 + n2; 
} 

現在把它想: -

add<float>(2,3.0); 
+0

算術運算符的語法是什麼? – Cirvis 2014-11-14 17:44:14

3

導致如果您使用的是C++ 14:

template<typename T1, typename T2> 
auto add(T1 n1, T2 n2) 
{ 
    return n1 + n2; 
} 

這就好比C++ 11的版本,但不要求你寫出來的尾隨回報型你自己(這很好)。

+0

爲什麼不'decltype(auto)'? 'add'應該返回一個引用,如果'operator +'爲兩種類型返回一個 – Columbo 2014-11-14 22:43:07

+0

@Columbo:我承認我對這個東西知之甚少。請隨時提出適當的補救措施。 – 2014-11-15 05:06:05

1

另一個C++ 11解決方案將使用std::common_type<T1, T2>::type作爲返回類型。