是否有用于“缓存计算”/“缓存 getter”的通用模式或即用型 boost 类?
我的意思是这样的:
class Test{
public:
Value getValue() const;
protected:
Value calculateValue() const;//REALLY expensive operation.
mutable bool valueIsDirty;
mutable Value cachedValue;
}
Value Test::getValue() const{
if (valueIsDirty){
cachedValue = calculateValue();
valueIsDirty = false;
}
return cachedValue;
}
我可以使用
std::pair<Value, bool>
并将 getValue/calculateValue
转换为宏,但是如果 值依赖于其他值 (存储在其他类中)并且这些值也可以被缓存,那么这并没有真正的帮助。这种“模式”有现成的解决方案吗?目前我手动处理这些缓存值,但这并不“漂亮”。
限制:
C++03 标准。允许 boost 。
最佳答案
Proxy design pattern 可以帮助解决这个问题。
一个典型的实现将定义一个类 ValuePtr
,它的行为就像一个普通的 Value*
,即它有一个重载的 operator->
和 operator*
。但是这些操作符不是直接访问底层的 Value
对象,而是包含决定加载或重新计算实际值的逻辑。这个额外的间接级别将封装代理逻辑。
如果您需要计算对其他对象的引用,也许 std::shared_ptr<Value>
可用作 ValuePtr
中的底层数据类型。
有关代码示例,请参见 this site。 Boost.Flyweight 也可能有帮助。
关于c++ - 缓存的 getter/计算模式|具有依赖关系跟踪的 boost 类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17722289/