在其他重载中重用重载

Reusing overloads in other overloads

本文关键字:重载 其他      更新时间:2023-10-16

如果setter函数重载

void setDamageRange(const Range& r);
void setDamageRange(int min, int max);
我可以在另一个 中使用其中一个重载
void Weapon::setDamageRange(const Range& r)
{
    setDamageRange(r.min, r.max);
}
void Weapon::setDamageRange(int min, int max)
{
    mDamageRange.min = min;
    mDamageRange.max = max;
}
我应该那样做吗?还是我应该再做一次有效性检查和赋值就像这样
void Weapon::setDamageRange(const Range& r)
{
    mDamageRange = r;
}
void Weapon::setDamageRange(int min, int max)
{
    mDamageRange.min = min;
    mDamageRange.max = max;
}

?

我的直觉告诉我,出于重用代码的目的,我应该选择第一种选择,因为这通常是良好的实践。但与此同时,感觉它在某种程度上使它变得混乱,特别是如果我要提供更多的函数重载,因为其中只有一个是"控制"函数。

就像如果我认为我真的不需要"控制"函数并删除它一样,我也必须为所有其他重载重写代码。

我应该[从一个重载调用另一个重载]吗?

绝对!这是一个重用代码的好方法。

或者我应该重新执行所有的有效性检查和赋值

一般来说,这会违背Don't Repeat Yourself原则,因为相同的验证(如果有的话)必须在两个地方进行。