因此,例如我想創建一個函數,添加兩個數字並返回總數。用不同的參數創建模板函數
template<typename T1, typename T2>
T1 add(T1 n1, T2 n2){
return n1 + n2;
}
的問題是,如果T1
是int
和T2
是float
。那麼功能將會是return int
。但我想要它return float
。有一個技巧或方法來實現它?
因此,例如我想創建一個函數,添加兩個數字並返回總數。用不同的參數創建模板函數
template<typename T1, typename T2>
T1 add(T1 n1, T2 n2){
return n1 + n2;
}
的問題是,如果T1
是int
和T2
是float
。那麼功能將會是return int
。但我想要它return float
。有一個技巧或方法來實現它?
是
template<typename RT, typename T1, typename T2>
RT add(T1 n1, T2 n2){
return n1 + n2;
}
現在把它想: -
add<float>(2,3.0);
如果您正在使用C++11
decltype
是你的朋友
template<typename T1, typename T2>
auto add(T1 n1, T2 n2) -> decltype(n1 + n2) {
return n1 + n2;
}
這將使用類型從n1 + n2
更多在http://en.wikipedia.org/wiki/C%2B%2B11#Alternative_function_syntax
導致如果您使用的是C++ 14:
template<typename T1, typename T2>
auto add(T1 n1, T2 n2)
{
return n1 + n2;
}
這就好比C++ 11的版本,但不要求你寫出來的尾隨回報型你自己(這很好)。
爲什麼不'decltype(auto)'? 'add'應該返回一個引用,如果'operator +'爲兩種類型返回一個 – Columbo 2014-11-14 22:43:07
@Columbo:我承認我對這個東西知之甚少。請隨時提出適當的補救措施。 – 2014-11-15 05:06:05
另一個C++ 11解決方案將使用std::common_type<T1, T2>::type
作爲返回類型。
算術運算符的語法是什麼? – Cirvis 2014-11-14 17:44:14