C ++从函数返回double或int

时间:2012-03-30 17:56:56

标签: c++

我有一个函数,它采用完全相同的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(一个用于整数,另一个用于双精度)。谢谢你的任何建议。

4 个答案:

答案 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

它们是相同的数字,双精度将有助于精确度。

让它返回一个双倍。它使用更多的内存,但它的本地范围是谁关心?