我有一个函数,它采用完全相同的args,但有时我希望它返回一个double,其他时候我想它返回一个int.这样做的正确方法是什么?
我可以执行函数重载,但重载函数的声明必须通过参数列表中的参数类型和/或数量彼此不同.这些是相同的,所以函数重载不适用(我不认为).
double calc( int value, int add, double mult )
{
// Sometimes I want this to return int. Sometimes double.
return (value + add) * mult;
}
Run Code Online (Sandbox Code Playgroud)
当我想要的类型或写两个函数时,我宁愿不转换为int(一个用于int,另一个用于双精度).谢谢你的建议.
您可以创建第二个功能:
int calcInt(int value, int add, double mult) {
return calc(value, add, mult);
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用模板:
template <class myType>
myType calc(int value, int add, myType mult) {
return (value + add) * mult;
}
Run Code Online (Sandbox Code Playgroud)
您不能使用相同的名称和参数创建不同的函数; 编译器不知道你想调用哪一个.
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
Run Code Online (Sandbox Code Playgroud)