1
我有以下功能:如何重构此逻辑的函数参数:“仅当参数1为真时才需要参数2”?
public enum class SetMinMaxMode
{
Auto, // min and max is set based on the channel data
Manual
};
generic<typename T> where T : System::ValueType
void SetData(array<T>^ data)
{
SetData(data, SetMinMaxMode::Auto, Double::MinValue, Double::MaxValue);
}
generic<typename T> where T : System::ValueType
void SetData(array<T>^ data, SetMinMaxMode minMaxMode, Double minValue, Double maxValue)
{
//
}
参数minValue(最小值)和包括maxValue当参数minMaxMode是SetMinMaxMode ::手册时才使用。
如果有人这样写道功能:
SetData(data, SetMinMaxMode::Auto, desiredMinValue, desiredMaxValue);
然后,他可能不知道,最后的两个参数都不会被使用。
我的问题是,有什么方法可以重构,以便有人永远不需要提供不必要的参数?
是,使用不同的功能名称将是一个解决方案。但是如果你考虑如何实现这两个函数,仍然需要一个“扩展”函数来获取所有的参数,比如SetDataCore(data,mode,min,max)。 –
SetDataAuto可以用另外两个参数调用SetDataManual。 'SetDataAuto(Data){SetDataManual(data,1,2); }' – mydogisbox
对不起,这里可能会有困惑。 SetDataAuto将根据数据计算最小值和最大值,计算出的最小值和最大值仅在运行时已知。我想我可以做一些像'SetDataAuto(data){double min,max; FindMinMax(data,min,max); SetDataManual(data,min,max); }'。但是如果我真的想要一个**核心**函数来接受所有参数呢? –