我有一个函数,它采用完全相同的args,但有时我希望它返回一个double,其他时候我想它返回一个int。这样做的正确方法是什么?
我可以执行函数重载,但是重载函数的声明必须通过参数列表中的类型和/或参数数量彼此不同。这些是相同的,所以函数重载不适用(我不认为)。
double calc( int value, int add, double mult )
{
// Sometimes I want this to return int. Sometimes double.
return (value + add) * mult;
}
当我想要的类型或写两个函数时,我宁愿不转换为int(一个用于整数,另一个用于双精度)。谢谢你的任何建议。
答案 0 :(得分:5)
您可以创建第二个功能:
int calcInt(int value, int add, double mult) {
return calc(value, add, mult);
}
或者您可以使用模板:
template <class myType>
myType calc(int value, int add, myType mult) {
return (value + add) * mult;
}
您不能使用相同的名称和参数创建不同的函数;编译器不知道你想调用哪一个。
答案 1 :(得分:5)
template <typename T, typename U>
T calc (const int value, const int add, const U mult)
{
return static_cast<T> ((value + add) * mult);
}
calc<double> (1, 2, 1.7); // returns double
calc<int> (1, 2, 3.4); // returns int
答案 2 :(得分:1)
假设这是为了保持精度或类似的东西,我会定义自己的类型 - Number
或类似的东西,并在内部管理它是int还是double。
答案 3 :(得分:1)
只需将其作为双精度或使用模板,让编译器弄明白。
如果你的int = 1 然后加倍= 1.0
它们是相同的数字,双精度将有助于精确度。
让它返回一个双倍。它使用更多的内存,但它的本地范围是谁关心?