我目前使用三个不同的函数来返回一个数值(一个返回一个double
,另外两个返回一个long
):
int main(void)
{
// lots of code
dRate = funcGetInterestRate();
lMonths = funcGetTerm();
lPrincipal = funcGetPrincipal();
// lots of code
return 0;
}
这三个函数的代码大约 90% 相同,所以我想合并为 1 个函数。我想将值标志传递给单个函数,如下所示:
- 如果“1”通过,确定利率,返回a
double
- 如果“2”通过,确定贷款期限,返回a
long
- 如果“3”通过,确定贷款本金,返回a
long
我只想在调用函数时从该函数返回 1 个值,但我想要返回的值可以是double
or a long
。我想做这样的事情:
void funcFunction(value passed to determine either long or double)
{
// lots of code
if (foo)
return double value;
else
return long value;
}
是否有捷径可寻?
函数的返回类型在编译时是固定的。您无法根据传入的参数更改返回类型。
但是,由于您的主要目标是删除函数中的重复代码并合并它们,因此可以通过不同的方式解决这个问题。换句话说,这是一个XY问题 https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem.
在您的情况下,您可以做的是将三个函数中的每个函数中的公共代码提取到一个单独的函数中,然后三个原始函数可以调用公共函数来完成大部分工作,然后提取它们需要的部分并返回该部分。
例如:
struct loan {
double rate;
long term;
long principal;
};
void calcLoan(struct loan *loan)
{
// do stuff
loan->rate = // some value
loan->term = // some value
loan->principal = // some value
}
double funcGetInterestRate()
{
struct loan loan;
calcLoan(&loan);
return loan.rate;
}
long funcGetTerm()
{
struct loan loan;
calcLoan(&loan);
return loan.term;
}
long funcGetPrincipal()
{
struct loan loan;
calcLoan(&loan);
return loan.principal;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)