创建具有不同参数的模板函数

时间:2014-11-14 17:28:11

标签: c++ templates

例如,我想创建一个添加两个数字并返回总数的函数。

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

如果T1intT2float,则会出现问题。然后函数将return int。但我希望它return float。是否有技巧或方法来实现它?

4 个答案:

答案 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作为返回类型。