在其他重载中重用重载
Reusing overloads in other overloads
如果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原则,因为相同的验证(如果有的话)必须在两个地方进行。
相关文章:
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 重载其他类的新运算符
- 泛型枚举和其他类型的重载模板函数
- 为什么重载运算符可以返回其返回类型以外的其他内容?
- 将基类的成员函数重载到其他派生类C++
- msvc 编译器(和其他编译器)如何知道要绑定到哪个 std 重载?
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 编译以下重载<<需要什么enable_if或其他提示?
- operator_surrogate_func:未找到匹配的重载和其他2个错误
- 重载流<<运算符,用于指针/共享指针和其他类型的
- 如何在其他类中重载运算符 ==
- 在传递其他参数时在 C++ 中重载运算符
- 如何使用 std::shared_ptr<void> 和其他类型的 std::shared_ptr 进行函数重载?
- 重载+运算符问题与其他类中的友元函数混合
- 在类模板上覆盖方法,编译器看不到它,只能看到其他重载函数
- 赋值重载显式调用析构函数(在执行其他二进制重载运算符之后)
- c++运算符重载,看不到其他运算符
- 如何处理dervied类的多个重载,而不需要对其他文件进行多次更改
- SFINAE:当重载移动到其他命名空间时,检查函数是否存在会中断