如何重构这个逻辑的函数参数:“只有在参数1为真时才需要参数2”?

时间:2011-08-31 20:01:01

标签: refactoring

我必须遵循以下功能:

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 :: Manual时使用。

如果有人写这样的功能:

SetData(data, SetMinMaxMode::Auto, desiredMinValue, desiredMaxValue);  

然后他可能不知道最后两个参数不会被使用。

我的问题是,有没有办法重构,以便有人永远不需要提供不必要的参数?

1 个答案:

答案 0 :(得分:1)

您可以编写一个完全不接受SetMinMaxMode的函数。

SetDataAuto(data);

所以你要么用min / max来调用一个,要么用auto来调用那个。

你的其他功能是:

SetDataManual(data, min, max);