我正在尝试实现几种缓存算法,其中一种可以在运行时替换另一种。
所以我开始描述一个界面:
class ICache
{
public:
virtual ~ICache(){}
virtual const std::vector<SomeValue>& getSomeValues() const = 0;
virtual const std::vector<AnotherValue>& getAnotherValues() const = 0;
...
}
这就是我的问题 - 在界面中返回引用是不好的做法?
此类设计强制执行并暴露类的内部实现,实现它(因为它“必须”将所有向量存储为成员)。
有更好的方法吗?
答案 0 :(得分:1)
我认为在这种情况下返回引用没有任何困难。接口只是调用者和服务之间的契约。我同意这个合同的性质似乎意味着在缓存方面以这种方式在内部存储数据更好,但不强制实现这样做;从实现的角度来看,它允许一种在正确使用时非常有效的机制(而不是强制创建一个新的向量并通过值传递它)。