在C++中使用模板专业化

use*_*413 1 c++ templates

如何使用具有2种不同输入类型和输出类型的模板特化来编写函数:

template <class input1, class input2, class output>
Run Code Online (Sandbox Code Playgroud)

并返回2个数字的总和(整数/双精度数).但是,如果我得到2个整数,我想返回一个整数类型,但对于整数和双精度的任何其他组合,我总是返回double.

我试图这样做而不直接使用'+'运算符,而是使用下一个函数:

double add_double_double(double a, double b) {return (a+b);}
double add_int_double(int a, double b) {return ((double)(a)+b);}
int   add_int_int(int a, int b) {return (a+b);}
Run Code Online (Sandbox Code Playgroud)

Kar*_*oor 5

如果你可以使用C++ 0x,你可以这样做:

template <typename T, typename U>
auto add(T lhs, U rhs) -> decltype(lhs+rhs)
{
    return lhs+rhs;
}
Run Code Online (Sandbox Code Playgroud)