2011-08-31 2 views
1

나는 다음과 같은 기능을 가지고 : 매개 변수 minMaxMode이 SetMinMaxMode : 수동 때이 논리에 대한 함수 매개 변수를 리팩토링하는 방법 : "param 1이 true 일 경우에만 param 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를에만 사용됩니다.

사람이 같은 기능을 쓰는 경우 :

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

그런 다음 그는 마지막 두 개의 매개 변수를 사용하지 않을 것을 알고하지 않을 수 있습니다.

내 질문에 리팩토링하는 방법이있어서 불필요한 매개 변수를 제공 할 필요가 없습니다.

답변

1

SetMinMaxMode를 전혀 사용하지 않는 함수를 작성할 수 있습니다.

SetDataAuto(data); 

그래서 min/max로 전화하거나 자동으로 전화를 걸면됩니다.

귀하의 다른 기능은 다음과 같습니다

SetDataManual(data, min, max); 
+0

예, 다른 기능의 이름을 사용하는 것은 해결책이 될 것입니다. 그러나 이러한 두 함수를 구현하는 방법을 생각하면 SetDataCore (data, mode, min, max)와 같은 모든 매개 변수를 사용하는 "확장 된"함수가 필요합니다. –

+0

SetDataAuto는 두 개의 추가 매개 변수로 SetDataManual을 호출 할 수 있습니다. SetDataAuto (데이터) {SetDataManual (data, 1, 2); } ' – mydogisbox

+0

죄송합니다. 여기에 혼란이있을 수 있습니다. SetDataAuto는 데이터를 기반으로 min과 max를 계산할 것이고 계산 된 min과 max는 런타임에만 알려질 것입니다. 나는'SetDataAuto (data) {double min, max; FindMinMax (data, min, max); SetDataManual (데이터, 최소, 최대); }'. 그러나 모든 매개 변수를 취하는 ** 핵심 ** 기능을 실제로 갖고 싶다면 어떻게해야합니까? –

관련 문제