gpt4 book ai didi

c++ - 几个类使用不同的 api 实现父类

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:58 24 4
gpt4 key购买 nike

我有一个带有纯虚方法的类 Feature。

class Feature {
public:
virtual ~Feature() {}
virtual const float getValue(const vector<int>& v) const = 0;
};

该类由多个类实现,例如 FeatureA 和 FeatureB。一个单独的类 Computer(简化)使用 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;

我当然可以修改Feature、FeatureA、FeatureB中getValue的签名,将additionalInfo作为参数,同时在compute方法中添加additionalInfo作为参数。但是如果我想实现需要更多附加信息的 FeatureD,我可能不得不稍后再次修改所有这些签名。我想知道是否有更优雅的解决方案,或者是否有一种已知的设计模式可以指出我进一步阅读。

最佳答案

你至少有两个选择:

  1. 不是将单个 vector 传递给 getValue(),而是传递一个结构。在此结构中,您今天可以放置 vector ,明天可以放置更多数据。当然,如果您的程序的某些具体运行不需要额外的字段,那么计算它们的需求可能是一种浪费。但是,如果您始终需要计算所有数据(即,如果总是有一个 FeatureC),则不会造成性能损失。
  2. 传递给 getValue() 一个对象的引用,该对象具有获取必要数据的方法。这个对象可以是计算机本身,或者一些更简单的代理。然后 getValue() 实现可以准确地请求他们需要的东西,并且可以延迟计算。在某些情况下,惰性将消除浪费的计算,但这样做的整体结构将由于必须调用(可能是虚拟的)函数来获取各种数据而强加一些小的恒定开销。

关于c++ - 几个类使用不同的 api 实现父类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17468046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com