例如,我想创建一个添加两个数字并返回总数的函数。
template<typename T1, typename T2>
T1 add( T1 n1, T2 n2 ){
return n1 + n2;
}
如果T1
为int
且T2
为float
,则会出现问题。然后函数将return int
。但我希望它return float
。是否有技巧或方法来实现它?
答案 0 :(得分:10)
如果您使用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
答案 1 :(得分:4)
是
template<typename RT, typename T1, typename T2>
RT add( T1 n1, T2 n2 ){
return n1 + n2;
}
现在称之为: -
add<float>(2,3.0);
答案 2 :(得分:3)
如果您使用的是C ++ 14:
template<typename T1, typename T2>
auto add(T1 n1, T2 n2)
{
return n1 + n2;
}
这就像C ++ 11版本,但不要求你自己写出 trailing-return-type (这很好)。
答案 3 :(得分:1)
另一个C ++ 11解决方案是使用std::common_type<T1, T2>::type
作为返回类型。