我有一個純虛擬方法的類功能。幾個類實現不同API的父類
class Feature {
public:
virtual ~Feature() {}
virtual const float getValue(const vector<int>& v) const = 0;
};
該類由幾個類實現,例如FeatureA和FeatureB。 一個單獨的類Computer(simplified)使用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方法的附加信息。在FeatureC的方法看起來像
const float getValue(const vector<int>& v, const vector<int>& additionalInfo) const;
我當然可以修改的getValue的簽名功能,FeatureA,FeatureB採取additionalInfo作爲參數,並添加additionalInfo作爲計算方法的參數。但是如果我想實現需要更多附加信息的FeatureD,我可能稍後必須再次修改所有這些簽名。我想知道是否有一個更優雅的解決方案,或者如果有一個已知的設計模式,您可以指向我進一步閱讀。
謝謝,很棒的選擇! – needsaname
你很受歡迎。我鼓勵你對任何和所有你認爲有用的答案進行投票(並接受你最終找到的最相關的答案)。歡迎來到StackOverflow。 –