순수 가상 메서드가있는 클래스 피쳐가 있습니다.여러 클래스가 다양한 API를 사용하여 부모 클래스를 구현합니다.
class Feature {
public:
virtual ~Feature() {}
virtual const float getValue(const vector<int>& v) const = 0;
};
이 클래스는 FeatureA 및 FeatureB와 같은 여러 클래스로 구현됩니다. 별도의 컴퓨터 클래스 (단순화 된)는 getValue 메서드를 사용하여 계산을 수행합니다.
class Computer {
public:
const float compute(const vector<Feature*>& features, const vector<int>& v) {
float res = 0;
for (int i = 0; i < features.size(); ++i) {
res += features[i]->getValue(v);
}
return res;
}
};
는 지금, 나는 FeatureC을 구현하고 싶은 생각하지만 난이을 getValue 방법에 대한 자세한 내용이 필요하다는 것을 알고 있습니다. 나는 물론 기능에 getValue의 서명을 수정할 수 있습니다
const float getValue(const vector<int>& v, const vector<int>& additionalInfo) const;
처럼 FeatureC의 방법이 보인다 FeatureA, FeatureB 매개 변수로 additionalInfo을하고 또한 계산 방법에서 매개 변수로 additionalInfo을 추가 할 수 있습니다. 그러나 나중에 추가 정보가 필요한 FeatureD를 구현하려는 경우 나중에 해당 서명을 모두 수정해야 할 수도 있습니다. 이것에 대한 좀 더 우아한 해결책이 있는지 또는 추가 읽기를 위해 나를 가리킬 수있는 알려진 디자인 패턴이 있는지 궁금합니다.
감사합니다. 훌륭한 옵션! – needsaname
대단히 환영합니다. 도움이되는 답변을 모두 선택하여 투표하십시오. (궁극적으로 가장 관련성이 높은 답변을 수락하십시오). StackOverflow에 오신 것을 환영합니다. –