如果我只启用double和integer,那么它是4个函数。但我想启用所有数据类型(int long float double unsigned numbers等)。它怎么可能?
#include <iostream>
using namespace std;
double diff(int num1, int num2) {
return double(num1-num2);
}
double diff(int num1, double num2) {
return double(num1)-num2;
}
double diff(double num1, int num2) {
return num1-double(num2);
}
double diff(double num1, double num2) {
return num1-num2;
}
int main() {
int a = 10;
double b = 4.4;
cout << diff(a, b) << endl;
return 0;
}
答案 0 :(得分:9)
template <typename T, typename U>
double diff(T a, U b) {
return a - b;
}
您不需要转换为double
- 如果任一参数为double
,则会为您完成此操作;如果两者都是整数,则在return
期间为您完成。然而,
double diff(double a, double b);
也可以使用int
参数调用。
答案 1 :(得分:8)
使用模板功能:
template <typename T1, typename T2>
double diff(const T1& lhs, const T2& rhs)
{
return lhs - rhs;
}
答案 2 :(得分:4)
您不必“启用”操作,只需写下:
cout << (a - b) << endl;
答案 3 :(得分:3)
与之前的所有答案不同,我将添加有关C ++ 11的内容。在C ++ 11中,您可以使用decltype
。
#include <iostream>
template <typename T1, typename T2>
auto diff(T1 a, T2 b) -> decltype(a)
{
return (a - b);
}
int main() {
std::cout << diff(3.5, 1) << std::endl;
std::cout << diff(3, 1.5) << std::endl;
}
diff
函数将始终返回类型的值,如第一个参数。注意在第一种情况下它是浮点数,但在第二种情况下它是整数。
答案 4 :(得分:1)
您可以为同一个
定义模板template <typename T, typename U>
T diff(const T& a, const U& b) {
return a - b;
}
这段代码做了很多假设,比如运算符 - 是为T定义的,返回类型总是T类型等等......
答案 5 :(得分:1)
您总是可以使用绝对值来计算差异,例如
cout << abs(a - b) << endl;
你可能想要使用像之前的答案那样的模板。